@@ -845,13 +845,18 @@ cfIEEE1284NormalizeMakeModel(
845845 //
846846
847847 modelptr = buffer + (make - make_and_model );
848- else if (!strncasecmp (buffer , make , strlen (make )) &&
848+ else if (strlen (make ) < bufsize &&
849+ !strncasecmp (buffer , make , strlen (make )) &&
849850 isspace (buffer [strlen (make )]))
851+ {
850852 //
851853 // User-supplied make string matches start of input
852854 //
853855
854856 modelptr = buffer + strlen (make ) + 1 ;
857+ if (modelptr >= buffer + strlen (buffer ))
858+ modelptr = buffer + strlen (buffer );
859+ }
855860 else
856861 {
857862 //
@@ -860,6 +865,8 @@ cfIEEE1284NormalizeMakeModel(
860865
861866 snprintf (buffer , bufsize , "%s %s" , make , make_and_model );
862867 modelptr = buffer + strlen (make ) + 1 ;
868+ if (modelptr >= buffer + strlen (buffer ))
869+ modelptr = buffer + strlen (buffer );
863870 }
864871 }
865872
@@ -880,6 +887,8 @@ cfIEEE1284NormalizeMakeModel(
880887
881888 snprintf (buffer , bufsize , "Xerox %s" , make_and_model );
882889 modelptr = buffer + 6 ;
890+ if (modelptr >= buffer + strlen (buffer ))
891+ modelptr = buffer + strlen (buffer );
883892 }
884893 else if (!strncasecmp (make_and_model , "Eastman" , 7 ))
885894 {
@@ -889,6 +898,8 @@ cfIEEE1284NormalizeMakeModel(
889898
890899 snprintf (buffer , bufsize , "Kodak %s" , make_and_model + 7 );
891900 modelptr = buffer + 6 ;
901+ if (modelptr >= buffer + strlen (buffer ))
902+ modelptr = buffer + strlen (buffer );
892903 }
893904 else if (!strncasecmp (make_and_model , "laserwriter" , 11 ))
894905 {
@@ -898,6 +909,8 @@ cfIEEE1284NormalizeMakeModel(
898909
899910 snprintf (buffer , bufsize , "Apple LaserWriter%s" , make_and_model + 11 );
900911 modelptr = buffer + 6 ;
912+ if (modelptr >= buffer + strlen (buffer ))
913+ modelptr = buffer + strlen (buffer );
901914 }
902915 else if (!strncasecmp (make_and_model , "colorpoint" , 10 ))
903916 {
@@ -907,6 +920,8 @@ cfIEEE1284NormalizeMakeModel(
907920
908921 snprintf (buffer , bufsize , "Seiko %s" , make_and_model );
909922 modelptr = buffer + 6 ;
923+ if (modelptr >= buffer + strlen (buffer ))
924+ modelptr = buffer + strlen (buffer );
910925 }
911926 else if (!strncasecmp (make_and_model , "fiery" , 5 ))
912927 {
@@ -916,6 +931,8 @@ cfIEEE1284NormalizeMakeModel(
916931
917932 snprintf (buffer , bufsize , "EFI %s" , make_and_model );
918933 modelptr = buffer + 4 ;
934+ if (modelptr >= buffer + strlen (buffer ))
935+ modelptr = buffer + strlen (buffer );
919936 }
920937 else if (!strncasecmp (make_and_model , "ps " , 3 ) ||
921938 !strncasecmp (make_and_model , "colorpass" , 9 ))
@@ -926,6 +943,8 @@ cfIEEE1284NormalizeMakeModel(
926943
927944 snprintf (buffer , bufsize , "Canon %s" , make_and_model );
928945 modelptr = buffer + 6 ;
946+ if (modelptr >= buffer + strlen (buffer ))
947+ modelptr = buffer + strlen (buffer );
929948 }
930949 else if (!strncasecmp (make_and_model , "primera" , 7 ))
931950 {
@@ -935,6 +954,8 @@ cfIEEE1284NormalizeMakeModel(
935954
936955 snprintf (buffer , bufsize , "Fargo %s" , make_and_model );
937956 modelptr = buffer + 6 ;
957+ if (modelptr >= buffer + strlen (buffer ))
958+ modelptr = buffer + strlen (buffer );
938959 }
939960 else if (!strncasecmp (make_and_model , "designjet" , 9 ) ||
940961 !strncasecmp (make_and_model , "deskjet" , 7 ) ||
@@ -947,6 +968,8 @@ cfIEEE1284NormalizeMakeModel(
947968
948969 snprintf (buffer , bufsize , "HP %s" , make_and_model );
949970 modelptr = buffer + 3 ;
971+ if (modelptr >= buffer + strlen (buffer ))
972+ modelptr = buffer + strlen (buffer );
950973 }
951974 else if (!strncasecmp (make_and_model , "ecosys" , 6 ))
952975 {
@@ -956,22 +979,28 @@ cfIEEE1284NormalizeMakeModel(
956979
957980 snprintf (buffer , bufsize , "Kyocera %s" , make_and_model );
958981 modelptr = buffer + 8 ;
982+ if (modelptr >= buffer + strlen (buffer ))
983+ modelptr = buffer + strlen (buffer );
959984 }
960985
961986 //
962987 // Known make names with space
963988 //
964989
965- else if (strncasecmp (buffer , "konica minolta" , 14 ) &&
990+ else if (strlen (buffer ) >= 15 &&
991+ strncasecmp (buffer , "konica minolta" , 14 ) &&
966992 isspace (buffer [14 ]))
967993 modelptr = buffer + 15 ;
968- else if (strncasecmp (buffer , "fuji xerox" , 10 ) &&
994+ else if (strlen (buffer ) >= 11 &&
995+ strncasecmp (buffer , "fuji xerox" , 10 ) &&
969996 isspace (buffer [10 ]))
970997 modelptr = buffer + 11 ;
971- else if (strncasecmp (buffer , "lexmark international" , 21 ) &&
998+ else if (strlen (buffer ) >= 22 &&
999+ strncasecmp (buffer , "lexmark international" , 21 ) &&
9721000 isspace (buffer [21 ]))
9731001 modelptr = buffer + 22 ;
974- else if (strncasecmp (buffer , "kyocera mita" , 12 ) &&
1002+ else if (strlen (buffer ) >= 13 &&
1003+ strncasecmp (buffer , "kyocera mita" , 12 ) &&
9751004 isspace (buffer [12 ]))
9761005 modelptr = buffer + 13 ;
9771006
@@ -991,6 +1020,9 @@ cfIEEE1284NormalizeMakeModel(
9911020 // Adjust modelptr to the actual start of the model name
9921021 //
9931022
1023+ if (modelptr && modelptr > buffer + strlen (buffer ))
1024+ modelptr = buffer + strlen (buffer );
1025+
9941026 if (modelptr )
9951027 while (!isalnum (* modelptr ) && * modelptr != '\0' )
9961028 modelptr ++ ;
@@ -1346,4 +1378,4 @@ cfIEEE1284NormalizeMakeModel(
13461378 if (extra ) * extra = extraptr ;
13471379 if (drvname ) * drvname = drvptr ;
13481380 return (buffer [0 ] ? buffer : NULL );
1349- }
1381+ }
0 commit comments