Skip to content

Commit aa0e950

Browse files
committed
feat: Switching snprintf to snprintf_err_handle
Switching calling snprintf to snprintf_err_handle in order to resolve a warning from flawfinder. The main issue is that if there is not enough room in the string, it may not null terminate it. This wrapper will always null terminate it, even on error. Signed-off-by: Tyler Erickson <[email protected]>
1 parent 883c695 commit aa0e950

22 files changed

+122
-122
lines changed

src/openseachest_util_options.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ const char* deviceHandleExample = "vmhba<#>";
2828
const char* deviceHandleName = "<deviceHandle>";
2929
const char* commandWindowType = "terminal";
3030
# else
31-
const char* deviceHandleExample = "/dev/sg<#>";
32-
const char* deviceHandleName = "<sg_device>";
33-
const char* commandWindowType = "terminal";
31+
const char* deviceHandleExample = "/dev/sg<#>";
32+
const char* deviceHandleName = "<sg_device>";
33+
const char* commandWindowType = "terminal";
3434
# endif
3535
#elif defined(__FreeBSD__)
3636
const char* deviceHandleExample = "/dev/da<#>";
@@ -131,7 +131,7 @@ void print_Elevated_Privileges_Text(void)
131131
printf("In Windows, open the Command Prompt using \"Run as administrator\".\n");
132132
printf("In Linux/Unix, put sudo before the command. This may require inputting your login password.\n");
133133
printf(
134-
"In Linux/Unix, log in to a root terminal (su), then execute the command. This requires the root password.\n");
134+
"In Linux/Unix, log in to a root terminal (su), then execute the command. This requires the root password.\n");
135135
#endif
136136
}
137137

@@ -159,7 +159,7 @@ void openseachest_utility_Info(const char* utilityName, const char* buildVersion
159159
userName = M_REINTERPRET_CAST(char*, safe_calloc(UNKNOWN_USER_NAME_MAX_LENGTH, sizeof(char)));
160160
if (userName)
161161
{
162-
snprintf(userName, UNKNOWN_USER_NAME_MAX_LENGTH, "Unable to retrieve current username");
162+
snprintf_err_handle(userName, UNKNOWN_USER_NAME_MAX_LENGTH, "Unable to retrieve current username");
163163
}
164164
else
165165
{
@@ -170,14 +170,14 @@ void openseachest_utility_Info(const char* utilityName, const char* buildVersion
170170
if (is_Running_Elevated())
171171
{
172172
# if defined(_WIN32)
173-
userdup = safe_strdup(&userName, "admin");
173+
userdup = safe_strdup(&userName, "admin");
174174
# else //!_WIN32
175175
userdup = safe_strdup(&userName, "root");
176176
# endif //_WIN32
177177
}
178178
else
179179
{
180-
userdup = safe_strdup(&userName, "current user");
180+
userdup = safe_strdup(&userName, "current user");
181181
}
182182
#endif // ENABLE_READ_USERNAME
183183
printf("==========================================================================================\n");

utils/C/openSeaChest/openSeaChest_Basics.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ int main(int argc, char* argv[])
366366
}
367367
else if (strcmp(longopts[optionIndex].name, DOWNLOAD_FW_LONG_OPT_STRING) == 0)
368368
{
369-
int res = snprintf(DOWNLOAD_FW_FILENAME_FLAG, FIRMWARE_FILE_NAME_MAX_LEN, "%s", optarg);
369+
int res = snprintf_err_handle(DOWNLOAD_FW_FILENAME_FLAG, FIRMWARE_FILE_NAME_MAX_LEN, "%s", optarg);
370370
if (res > 0 && res <= FIRMWARE_FILE_NAME_MAX_LEN)
371371
{
372372
DOWNLOAD_FW_FLAG = true;
@@ -560,22 +560,22 @@ int main(int argc, char* argv[])
560560
else if (strcmp(longopts[optionIndex].name, MODEL_MATCH_LONG_OPT_STRING) == 0)
561561
{
562562
MODEL_MATCH_FLAG = true;
563-
snprintf(MODEL_STRING_FLAG, MODEL_STRING_LENGTH, "%s", optarg);
563+
snprintf_err_handle(MODEL_STRING_FLAG, MODEL_STRING_LENGTH, "%s", optarg);
564564
}
565565
else if (strcmp(longopts[optionIndex].name, FW_MATCH_LONG_OPT_STRING) == 0)
566566
{
567567
FW_MATCH_FLAG = true;
568-
snprintf(FW_STRING_FLAG, FW_MATCH_STRING_LENGTH, "%s", optarg);
568+
snprintf_err_handle(FW_STRING_FLAG, FW_MATCH_STRING_LENGTH, "%s", optarg);
569569
}
570570
else if (strcmp(longopts[optionIndex].name, CHILD_MODEL_MATCH_LONG_OPT_STRING) == 0)
571571
{
572572
CHILD_MODEL_MATCH_FLAG = true;
573-
snprintf(CHILD_MODEL_STRING_FLAG, CHILD_MATCH_STRING_LENGTH, "%s", optarg);
573+
snprintf_err_handle(CHILD_MODEL_STRING_FLAG, CHILD_MATCH_STRING_LENGTH, "%s", optarg);
574574
}
575575
else if (strcmp(longopts[optionIndex].name, CHILD_FW_MATCH_LONG_OPT_STRING) == 0)
576576
{
577577
CHILD_FW_MATCH_FLAG = true;
578-
snprintf(CHILD_FW_STRING_FLAG, CHILD_FW_MATCH_STRING_LENGTH, "%s", optarg);
578+
snprintf_err_handle(CHILD_FW_STRING_FLAG, CHILD_FW_MATCH_STRING_LENGTH, "%s", optarg);
579579
}
580580
else if (strcmp(longopts[optionIndex].name, DISPLAY_LBA_LONG_OPT_STRING) == 0)
581581
{

utils/C/openSeaChest/openSeaChest_Configure.c

+6-6
Original file line numberDiff line numberDiff line change
@@ -899,7 +899,7 @@ int main(int argc, char* argv[])
899899
if (filenameptr && safe_strlen(filenameptr) > 1)
900900
{
901901
filenameptr += 1; // go past the =
902-
if (snprintf(SCSI_SET_MP_FILENAME, SCSI_SET_MP_FILENAME_LEN, "%s", filenameptr) <= 0)
902+
if (snprintf_err_handle(SCSI_SET_MP_FILENAME, SCSI_SET_MP_FILENAME_LEN, "%s", filenameptr) <= 0)
903903
{
904904
print_Error_In_Cmd_Line_Args(SCSI_SET_MP_LONG_OPT_STRING, optarg);
905905
exit(UTIL_EXIT_ERROR_IN_COMMAND_LINE);
@@ -932,7 +932,7 @@ int main(int argc, char* argv[])
932932
{
933933
case 0: // page-subpage
934934
{
935-
snprintf(pageAndSubpage, PARSE_MP_PAGE_AND_SUBPAGE_LENGTH, "%s", token);
935+
snprintf_err_handle(pageAndSubpage, PARSE_MP_PAGE_AND_SUBPAGE_LENGTH, "%s", token);
936936
// parse later outside this loop. If we tokenize again in here, we'll break the way the
937937
// parsing works... :(
938938
}
@@ -1401,22 +1401,22 @@ int main(int argc, char* argv[])
14011401
else if (strcmp(longopts[optionIndex].name, MODEL_MATCH_LONG_OPT_STRING) == 0)
14021402
{
14031403
MODEL_MATCH_FLAG = true;
1404-
snprintf(MODEL_STRING_FLAG, MODEL_STRING_LENGTH, "%s", optarg);
1404+
snprintf_err_handle(MODEL_STRING_FLAG, MODEL_STRING_LENGTH, "%s", optarg);
14051405
}
14061406
else if (strcmp(longopts[optionIndex].name, FW_MATCH_LONG_OPT_STRING) == 0)
14071407
{
14081408
FW_MATCH_FLAG = true;
1409-
snprintf(FW_STRING_FLAG, FW_MATCH_STRING_LENGTH, "%s", optarg);
1409+
snprintf_err_handle(FW_STRING_FLAG, FW_MATCH_STRING_LENGTH, "%s", optarg);
14101410
}
14111411
else if (strcmp(longopts[optionIndex].name, CHILD_MODEL_MATCH_LONG_OPT_STRING) == 0)
14121412
{
14131413
CHILD_MODEL_MATCH_FLAG = true;
1414-
snprintf(CHILD_MODEL_STRING_FLAG, CHILD_MATCH_STRING_LENGTH, "%s", optarg);
1414+
snprintf_err_handle(CHILD_MODEL_STRING_FLAG, CHILD_MATCH_STRING_LENGTH, "%s", optarg);
14151415
}
14161416
else if (strcmp(longopts[optionIndex].name, CHILD_FW_MATCH_LONG_OPT_STRING) == 0)
14171417
{
14181418
CHILD_FW_MATCH_FLAG = true;
1419-
snprintf(CHILD_FW_STRING_FLAG, CHILD_FW_MATCH_STRING_LENGTH, "%s", optarg);
1419+
snprintf_err_handle(CHILD_FW_STRING_FLAG, CHILD_FW_MATCH_STRING_LENGTH, "%s", optarg);
14201420
}
14211421
break;
14221422
case ':': // missing required argument

utils/C/openSeaChest/openSeaChest_Defect.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -443,22 +443,22 @@ int main(int argc, char* argv[])
443443
else if (strcmp(longopts[optionIndex].name, MODEL_MATCH_LONG_OPT_STRING) == 0)
444444
{
445445
MODEL_MATCH_FLAG = true;
446-
snprintf(MODEL_STRING_FLAG, MODEL_STRING_LENGTH, "%s", optarg);
446+
snprintf_err_handle(MODEL_STRING_FLAG, MODEL_STRING_LENGTH, "%s", optarg);
447447
}
448448
else if (strcmp(longopts[optionIndex].name, FW_MATCH_LONG_OPT_STRING) == 0)
449449
{
450450
FW_MATCH_FLAG = true;
451-
snprintf(FW_STRING_FLAG, FW_MATCH_STRING_LENGTH, "%s", optarg);
451+
snprintf_err_handle(FW_STRING_FLAG, FW_MATCH_STRING_LENGTH, "%s", optarg);
452452
}
453453
else if (strcmp(longopts[optionIndex].name, CHILD_MODEL_MATCH_LONG_OPT_STRING) == 0)
454454
{
455455
CHILD_MODEL_MATCH_FLAG = true;
456-
snprintf(CHILD_MODEL_STRING_FLAG, CHILD_MATCH_STRING_LENGTH, "%s", optarg);
456+
snprintf_err_handle(CHILD_MODEL_STRING_FLAG, CHILD_MATCH_STRING_LENGTH, "%s", optarg);
457457
}
458458
else if (strcmp(longopts[optionIndex].name, CHILD_FW_MATCH_LONG_OPT_STRING) == 0)
459459
{
460460
CHILD_FW_MATCH_FLAG = true;
461-
snprintf(CHILD_FW_STRING_FLAG, CHILD_FW_MATCH_STRING_LENGTH, "%s", optarg);
461+
snprintf_err_handle(CHILD_FW_STRING_FLAG, CHILD_FW_MATCH_STRING_LENGTH, "%s", optarg);
462462
}
463463
break;
464464
case ':': // missing required argument

utils/C/openSeaChest/openSeaChest_Erase.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -455,11 +455,11 @@ int main(int argc, char* argv[])
455455
#if !defined(DISABLE_TCG_SUPPORT)
456456
else if (strcmp(longopts[optionIndex].name, TCG_SID_LONG_OPT_STRING) == 0)
457457
{
458-
snprintf(TCG_SID_FLAG, TCG_SID_BUF_LEN, "%s", optarg);
458+
snprintf_err_handle(TCG_SID_FLAG, TCG_SID_BUF_LEN, "%s", optarg);
459459
}
460460
else if (strcmp(longopts[optionIndex].name, TCG_PSID_LONG_OPT_STRING) == 0)
461461
{
462-
snprintf(TCG_PSID_FLAG, TCG_PSID_BUF_LEN, "%s", optarg);
462+
snprintf_err_handle(TCG_PSID_FLAG, TCG_PSID_BUF_LEN, "%s", optarg);
463463
}
464464
#endif
465465
else if (strcmp(longopts[optionIndex].name, FORMAT_UNIT_LONG_OPT_STRING) == 0)
@@ -793,22 +793,22 @@ int main(int argc, char* argv[])
793793
else if (strcmp(longopts[optionIndex].name, MODEL_MATCH_LONG_OPT_STRING) == 0)
794794
{
795795
MODEL_MATCH_FLAG = true;
796-
snprintf(MODEL_STRING_FLAG, MODEL_STRING_LENGTH, "%s", optarg);
796+
snprintf_err_handle(MODEL_STRING_FLAG, MODEL_STRING_LENGTH, "%s", optarg);
797797
}
798798
else if (strcmp(longopts[optionIndex].name, FW_MATCH_LONG_OPT_STRING) == 0)
799799
{
800800
FW_MATCH_FLAG = true;
801-
snprintf(FW_STRING_FLAG, FW_MATCH_STRING_LENGTH, "%s", optarg);
801+
snprintf_err_handle(FW_STRING_FLAG, FW_MATCH_STRING_LENGTH, "%s", optarg);
802802
}
803803
else if (strcmp(longopts[optionIndex].name, CHILD_MODEL_MATCH_LONG_OPT_STRING) == 0)
804804
{
805805
CHILD_MODEL_MATCH_FLAG = true;
806-
snprintf(CHILD_MODEL_STRING_FLAG, CHILD_MATCH_STRING_LENGTH, "%s", optarg);
806+
snprintf_err_handle(CHILD_MODEL_STRING_FLAG, CHILD_MATCH_STRING_LENGTH, "%s", optarg);
807807
}
808808
else if (strcmp(longopts[optionIndex].name, CHILD_FW_MATCH_LONG_OPT_STRING) == 0)
809809
{
810810
CHILD_FW_MATCH_FLAG = true;
811-
snprintf(CHILD_FW_STRING_FLAG, CHILD_FW_MATCH_STRING_LENGTH, "%s", optarg);
811+
snprintf_err_handle(CHILD_FW_STRING_FLAG, CHILD_FW_MATCH_STRING_LENGTH, "%s", optarg);
812812
}
813813
else if (strcmp(longopts[optionIndex].name, PATTERN_LONG_OPT_STRING) == 0)
814814
{
@@ -3490,7 +3490,7 @@ void utility_Usage(bool shortUsage)
34903490
switch (exitIter)
34913491
{
34923492
case SEACHEST_ERASE_EXIT_ZERO_VALIDATION_FAILURE:
3493-
snprintf(seachestEraseExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
3493+
snprintf_err_handle(seachestEraseExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
34943494
TOOL_EXIT_CODE_STRING_MAX_LENGTH, "Zero Validation Failure");
34953495
break;
34963496
// add more exit codes here!

utils/C/openSeaChest/openSeaChest_Firmware.c

+16-16
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ int main(int argc, char* argv[])
224224
// parse long options that have no short option and required arguments here
225225
if (strcmp(longopts[optionIndex].name, DOWNLOAD_FW_LONG_OPT_STRING) == 0)
226226
{
227-
int res = snprintf(DOWNLOAD_FW_FILENAME_FLAG, FIRMWARE_FILE_NAME_MAX_LEN, "%s", optarg);
227+
int res = snprintf_err_handle(DOWNLOAD_FW_FILENAME_FLAG, FIRMWARE_FILE_NAME_MAX_LEN, "%s", optarg);
228228
if (res > 0 && res <= FIRMWARE_FILE_NAME_MAX_LEN)
229229
{
230230
DOWNLOAD_FW_FLAG = true;
@@ -272,32 +272,32 @@ int main(int argc, char* argv[])
272272
else if (strcmp(longopts[optionIndex].name, MODEL_MATCH_LONG_OPT_STRING) == 0)
273273
{
274274
MODEL_MATCH_FLAG = true;
275-
snprintf(MODEL_STRING_FLAG, MODEL_STRING_LENGTH, "%s", optarg);
275+
snprintf_err_handle(MODEL_STRING_FLAG, MODEL_STRING_LENGTH, "%s", optarg);
276276
}
277277
else if (strcmp(longopts[optionIndex].name, FW_MATCH_LONG_OPT_STRING) == 0)
278278
{
279279
FW_MATCH_FLAG = true;
280-
snprintf(FW_STRING_FLAG, FW_MATCH_STRING_LENGTH, "%s", optarg);
280+
snprintf_err_handle(FW_STRING_FLAG, FW_MATCH_STRING_LENGTH, "%s", optarg);
281281
}
282282
else if (strcmp(longopts[optionIndex].name, CHILD_MODEL_MATCH_LONG_OPT_STRING) == 0)
283283
{
284284
CHILD_MODEL_MATCH_FLAG = true;
285-
snprintf(CHILD_MODEL_STRING_FLAG, CHILD_MATCH_STRING_LENGTH, "%s", optarg);
285+
snprintf_err_handle(CHILD_MODEL_STRING_FLAG, CHILD_MATCH_STRING_LENGTH, "%s", optarg);
286286
}
287287
else if (strcmp(longopts[optionIndex].name, CHILD_FW_MATCH_LONG_OPT_STRING) == 0)
288288
{
289289
CHILD_FW_MATCH_FLAG = true;
290-
snprintf(CHILD_FW_STRING_FLAG, CHILD_FW_MATCH_STRING_LENGTH, "%s", optarg);
290+
snprintf_err_handle(CHILD_FW_STRING_FLAG, CHILD_FW_MATCH_STRING_LENGTH, "%s", optarg);
291291
}
292292
else if (strcmp(longopts[optionIndex].name, NEW_FW_MATCH_LONG_OPT_STRING) == 0)
293293
{
294294
NEW_FW_MATCH_FLAG = true;
295-
snprintf(NEW_FW_STRING_FLAG, NEW_FW_MATCH_STRING_LENGTH, "%s", optarg);
295+
snprintf_err_handle(NEW_FW_STRING_FLAG, NEW_FW_MATCH_STRING_LENGTH, "%s", optarg);
296296
}
297297
else if (strcmp(longopts[optionIndex].name, CHILD_NEW_FW_MATCH_LONG_OPT_STRING) == 0)
298298
{
299299
CHILD_NEW_FW_MATCH_FLAG = true;
300-
snprintf(CHILD_NEW_FW_STRING_FLAG, CHILD_NEW_FW_STRING_MATCH_LENGTH, "%s", optarg);
300+
snprintf_err_handle(CHILD_NEW_FW_STRING_FLAG, CHILD_NEW_FW_STRING_MATCH_LENGTH, "%s", optarg);
301301
}
302302
else if (strcmp(longopts[optionIndex].name, FWDL_SEGMENT_SIZE_LONG_OPT_STRING) == 0)
303303
{
@@ -1418,39 +1418,39 @@ void utility_Usage(bool shortUsage)
14181418
switch (exitIter)
14191419
{
14201420
case SEACHEST_FIRMWARE_EXIT_FIRMWARE_DOWNLOAD_COMPLETE:
1421-
snprintf(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
1421+
snprintf_err_handle(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
14221422
TOOL_EXIT_CODE_STRING_MAX_LENGTH, "Firmware Download Complete");
14231423
break;
14241424
case SEACHEST_FIRMWARE_EXIT_DEFERRED_DOWNLOAD_COMPLETED:
1425-
snprintf(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
1425+
snprintf_err_handle(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
14261426
TOOL_EXIT_CODE_STRING_MAX_LENGTH, "Deferred Firmware Download Complete");
14271427
break;
14281428
case SEACHEST_FIRMWARE_EXIT_DEFERRED_CODE_ACTIVATED:
1429-
snprintf(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
1429+
snprintf_err_handle(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
14301430
TOOL_EXIT_CODE_STRING_MAX_LENGTH, "Deferred Code Activated");
14311431
break;
14321432
case SEACHEST_FIRMWARE_EXIT_NO_MATCH_FOUND:
1433-
snprintf(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
1433+
snprintf_err_handle(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
14341434
TOOL_EXIT_CODE_STRING_MAX_LENGTH, "No Drive or Firmware match found");
14351435
break;
14361436
case SEACHEST_FIRMWARE_EXIT_MN_MATCH_FW_MISMATCH:
1437-
snprintf(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
1437+
snprintf_err_handle(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
14381438
TOOL_EXIT_CODE_STRING_MAX_LENGTH, "Model number matched, but Firmware mismatched");
14391439
break;
14401440
case SEACHEST_FIRMWARE_EXIT_FIRMWARE_HASH_DOESNT_MATCH:
1441-
snprintf(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
1441+
snprintf_err_handle(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
14421442
TOOL_EXIT_CODE_STRING_MAX_LENGTH, "Firmware File Hash Error");
14431443
break;
14441444
case SEACHEST_FIRMWARE_EXIT_ALREADY_UP_TO_DATE:
1445-
snprintf(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
1445+
snprintf_err_handle(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
14461446
TOOL_EXIT_CODE_STRING_MAX_LENGTH, "Firmware Already up to date");
14471447
break;
14481448
case SEACHEST_FIRMWARE_EXIT_MATCH_FOUND:
1449-
snprintf(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
1449+
snprintf_err_handle(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
14501450
TOOL_EXIT_CODE_STRING_MAX_LENGTH, "Firmware Match Found for update");
14511451
break;
14521452
case SEACHEST_FIRMWARE_EXIT_MATCH_FOUND_DEFERRED_SUPPORTED:
1453-
snprintf(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
1453+
snprintf_err_handle(seachestFirmwareExitCodes[exitIter - UTIL_TOOL_SPECIFIC_STARTING_ERROR_CODE].exitCodeString,
14541454
TOOL_EXIT_CODE_STRING_MAX_LENGTH,
14551455
"Firmware Match Found for update - deferred update supported");
14561456
break;

0 commit comments

Comments
 (0)