16-buffer-overflows.patch 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. Author: Fabian Greffrath <fabian+debian@greffrath.com>
  2. Description: Fix buffer overflows when using long filenames or
  3. passwords as arguments. Thanks, Antoine Cervoise.
  4. Bug-Debian: https://bugs.debian.org/736929
  5. --- a/source/apps/unace/exe/commline/commline.c
  6. +++ b/source/apps/unace/exe/commline/commline.c
  7. @@ -474,8 +474,10 @@ INT SwitchNumber,
  8. case APPS_UNACE_EXE_COMMLINE_SWITCH_P:
  9. {
  10. - strcpy(BASE_OPTIONS.ExtractOptions.CryptionData.Password,
  11. - Switch + 1);
  12. + const size_t size = sizeof(BASE_OPTIONS.ExtractOptions.CryptionData.Password) - 1;
  13. + strncpy(BASE_OPTIONS.ExtractOptions.CryptionData.Password,
  14. + Switch + 1, size);
  15. + BASE_OPTIONS.ExtractOptions.CryptionData.Password[size] = 0;
  16. BASE_CRYPT.DoUseCurrentPassword = 1;
  17. @@ -539,8 +541,10 @@ PCHAR PointPos;
  18. {
  19. if (APPS_EXE_COMMLINE.ArgumentCount < APPS_EXE_COMMLINE.ArgumentsNumber)
  20. {
  21. - strcpy(APPS_UNACE_EXE_COMMLINE.WildcardedArchiveName,
  22. - APPS_EXE_COMMLINE.Arguments[APPS_EXE_COMMLINE.ArgumentCount++]);
  23. + const size_t size = sizeof(APPS_UNACE_EXE_COMMLINE.WildcardedArchiveName) - 1;
  24. + strncpy(APPS_UNACE_EXE_COMMLINE.WildcardedArchiveName,
  25. + APPS_EXE_COMMLINE.Arguments[APPS_EXE_COMMLINE.ArgumentCount++], size);
  26. + APPS_UNACE_EXE_COMMLINE.WildcardedArchiveName[size] = 0;
  27. BASE_PATHFUNC_ToSystemPathSeparator(APPS_UNACE_EXE_COMMLINE.WildcardedArchiveName);
  28. @@ -555,6 +559,8 @@ PCHAR PointPos;
  29. && !BASE_CONVERT_StrICmp(PointPos, ".ace")
  30. && !BASE_CONVERT_StrICmp(PointPos, ".exe")))
  31. {
  32. + if (size - strlen(APPS_UNACE_EXE_COMMLINE.WildcardedArchiveName) >=
  33. + strlen(BASE_ACESTRUC_EXTENSION))
  34. strcat(APPS_UNACE_EXE_COMMLINE.WildcardedArchiveName,
  35. BASE_ACESTRUC_EXTENSION);
  36. }