=========== Original jpeg source code fragment: =================== switch (code = param_read_int(plist, (param_name = "JPEGQ"), &jq)) { case 0: if (jq < 0 || jq > 100) ecode = gs_error_limitcheck; else break; goto jqe; default: ecode = code; jqe:param_signal_error(plist, param_name, ecode); case 1: break; } =================== First rewritten version: ===================== param_name = "JPEGQ" ; code = param_read_int( plist , param_name , &jq ) ; if( code==0 ) { if( jq < 0 || jq > 100 ) { ecode = gs_error_limitcheck ; param_signal_error( plist , param_name , ecode ) ; } } else if( code!=1 ) { ecode = code; param_signal_error(plist, param_name, ecode); } =========== Correct + improved + obvious version: =========== param_name = "JPEGQ" ; code = param_read_int( plist , param_name , &jq ) ; if( code==0 ) { if( jq < 0 || jq > 100 ) { ecode = gs_error_limitcheck ; param_signal_error( plist , param_name , ecode ) ; } } else if( code < 0 ) { ecode = code; param_signal_error(plist, param_name, ecode); } /* in english the program sequence is: set parameter name, read it from command line, quit if is out of range integer, quit if it is garbage This cannot contain bugs! */ ====================================================================