diff -urNad cupsys-1.2.8~/backend/snmp.c cupsys-1.2.8/backend/snmp.c --- cupsys-1.2.8~/backend/snmp.c 2007-01-03 10:51:27.000000000 -0800 +++ cupsys-1.2.8/backend/snmp.c 2008-01-07 16:16:20.000000000 -0800 @@ -972,10 +972,24 @@ char *string, /* I - String buffer */ int strsize) /* I - String buffer size */ { - if (length < strsize) + if (length < 0) { - memcpy(string, *buffer, length); - string[length] = '\0'; + /* + * Disallow negative lengths! + */ + + fprintf(stderr, "ERROR: Bad ASN1 string length %d!\n", length); + *string = '\0'; + } + else if (length < strsize) + { + /* + * String is smaller than the buffer... + */ + + if (length > 0) + memcpy(string, *buffer, length); + string[length] = '\0'; } else { @@ -983,7 +997,8 @@ string[strsize - 1] = '\0'; } - (*buffer) += length; + if (length > 0) + (*buffer) += length; return (string); }