static int proc_name(char *param, char *value) { int ret_val; if (!(ret_val = isnull(param, value))) { ret_val += too_long(param, value, MAXLEN); ret_val += not_ascii(param, value); } return (ret_val); }
static int proc_version(char *param, char *value) { int ret_val; if (!(ret_val = isnull(param, value))) { ret_val += bad_first_char(param, value); ret_val += too_long(param, value, MAXLEN); ret_val += not_ascii(param, value); } return (ret_val); }
void TestSerialization::testStringLengthLimits() { std::vector<u8> buf; std::string too_long(STRING_MAX_LEN + 1, 'A'); std::string way_too_large(LONG_STRING_MAX_LEN + 1, 'B'); std::wstring too_long_wide(WIDE_STRING_MAX_LEN + 1, L'C'); EXCEPTION_CHECK(SerializationError, putString(&buf, too_long)); putLongString(&buf, too_long); too_long.resize(too_long.size() - 1); putString(&buf, too_long); EXCEPTION_CHECK(SerializationError, putWideString(&buf, too_long_wide)); too_long_wide.resize(too_long_wide.size() - 1); putWideString(&buf, too_long_wide); }
static int proc_arch(char *param, char *value) { int ret_val; char *token; if (!(ret_val = isnull(param, value))) { token = strtok(value, ", "); while (token) { ret_val += too_long(param, token, TOKLEN); ret_val += not_ascii(param, token); token = strtok(NULL, ", "); } } return (ret_val); }
int get_line P1H(void) #line 428 "./cwebdir/common.w" { restart: if(changing&&include_depth==change_depth) /*27:*/ #line 537 "./cwebdir/common.w" { change_line++; if(!input_ln(change_file)){ err_print("! Change file ended without @z"); buffer[0]= '@';buffer[1]= 'z';limit= buffer+2; } if(limit> buffer){ if(change_pending){ if_section_start_make_pending(0); if(change_pending){ changed_section[section_count]= 1;change_pending= 0; } } *limit= ' '; if(buffer[0]=='@'){ if(xisupper(buffer[1]))buffer[1]= tolower(buffer[1]); if(buffer[1]=='x'||buffer[1]=='y'){ loc= buffer+2; err_print("! Where is the matching @z?"); } else if(buffer[1]=='z'){ prime_the_change_buffer();changing= !changing;print_where= 1; } } } } /*:27*/ #line 431 "./cwebdir/common.w" ; if(!changing||include_depth> change_depth){ /*26:*/ #line 520 "./cwebdir/common.w" { cur_line++; while(!input_ln(cur_file)){ print_where= 1; if(include_depth==0){input_has_ended= 1;break;} else{ fclose(cur_file);include_depth--; if(changing&&include_depth==change_depth)break; cur_line++; } } if(!changing&&!input_has_ended) if(limit-buffer==change_limit-change_buffer) if(buffer[0]==change_buffer[0]) if(change_limit> change_buffer)check_change(); } /*:26*/ #line 433 "./cwebdir/common.w" ; if(changing&&include_depth==change_depth)goto restart; } if(input_has_ended)return 0; loc= buffer;*limit= ' '; if(buffer[0]=='@'&&(buffer[1]=='i'||buffer[1]=='I')){ loc= buffer+2;*limit= '"'; while(*loc==' '||*loc=='\t')loc++; if(loc>=limit){ err_print("! Include file name not given"); goto restart; } if(include_depth>=max_include_depth-1){ err_print("! Too many nested includes"); goto restart; } include_depth++; /*25:*/ #line 474 "./cwebdir/common.w" { #line 200 "./cwebdir/comm-w2c.ch" char*cur_file_name_end= cur_file_name+max_file_name_length-1; char*k= cur_file_name; #line 479 "./cwebdir/common.w" if(*loc=='"'){ loc++; while(*loc!='"'&&k<=cur_file_name_end)*k++= *loc++; if(loc==limit)k= cur_file_name_end+1; }else while(*loc!=' '&&*loc!='\t'&&*loc!='"'&&k<=cur_file_name_end)*k++= *loc++; if(k> cur_file_name_end)too_long(); *k= '\0'; #line 207 "./cwebdir/comm-w2c.ch" if((found_filename= kpse_find_cweb(cur_file_name))!=NULL&& (cur_file= fopen(found_filename,"r"))!=NULL){ if(strlen(found_filename)<max_file_name_length){ strcpy(cur_file_name,found_filename); free(found_filename); } #line 490 "./cwebdir/common.w" cur_line= 0;print_where= 1; goto restart; } #line 517 "./cwebdir/common.w" include_depth--;err_print("! Cannot open include file");goto restart; } /*:25*/ #line 452 "./cwebdir/common.w" ; } return 1; }
int substitute_named_strings (char *line, int *subst) { char sname[VNAMELEN]; int len = strlen(line); char *sub, *tmp, *s = line; int bs = 0, in_format = 0; int freeit; int i, n, m, err = 0; if (*s == '#' || strchr(s, '@') == NULL) { return 0; } if (!strncmp(line, "printf", 6) || !strncmp(line, "sprintf", 7)) { s = strchr(s, '"'); if (s == NULL) { /* no format string */ return E_PARSE; } s++; in_format = 1; } i = s - line; while (*s && !err) { if (in_format) { if (*s == '"' && (bs % 2 == 0)) { /* reached end of (s)printf format string */ in_format = 0; } if (*s == '\\') { bs++; } else { bs = 0; } } if (*s == '@') { n = gretl_namechar_spn(s + 1); if (n > 0) { if (n >= VNAMELEN) { n = VNAMELEN - 1; } *sname = '\0'; strncat(sname, s + 1, n); freeit = 0; sub = maybe_get_subst(sname, &n, in_format, &freeit); if (sub != NULL) { m = strlen(sub); if (len + m + 2 >= MAXLINE) { too_long(); err = 1; break; } tmp = gretl_strdup(s + n + 1); if (tmp == NULL) { err = E_ALLOC; } else { strcpy(s, sub); strcpy(s + m, tmp); free(tmp); len += m - (n + 1); s += m - 1; i += m - 1; *subst = 1; } if (freeit) { free(sub); } } } } s++; i++; } return err; }
boolean get_line P2C(file_index,i,boolean,do_includes) #line 331 "./ctie.w" { register input_description*inp_desc= input_organisation[i]; register FILE*fp; if(inp_desc->mode==ignore)return false; restart: if(inp_desc->current_include!=NULL){ register include_description*inc_desc= inp_desc->current_include; fp= inc_desc->the_file; /*26:*/ #line 426 "./ctie.w" { register int c; register char*k; if(feof(fp)) /*27:*/ #line 452 "./ctie.w" { include_description*temp= inc_desc->parent; fclose(fp); free(inc_desc); total_include_files--; inp_desc->current_include= temp; goto restart; } /*:27*/ #line 432 "./ctie.w" inp_desc->limit= k= inp_desc->buffer; while(k<=inp_desc->buffer_end&&(c= getc(fp))!=EOF&&c!='\n') if((*(k++)= c)!=' ')inp_desc->limit= k; if(k> inp_desc->buffer_end) if((c= getc(fp))!=EOF&&c!='\n'){ ungetc(c,fp);inp_desc->loc= inp_desc->buffer; err_print(i,"! Input line too long"); } if(c==EOF&&inp_desc->limit==inp_desc->buffer) /*27:*/ #line 452 "./ctie.w" { include_description*temp= inc_desc->parent; fclose(fp); free(inc_desc); total_include_files--; inp_desc->current_include= temp; goto restart; } /*:27*/ #line 444 "./ctie.w" inc_desc->line++; } /*:26*/ #line 342 "./ctie.w" } else{ fp= inp_desc->the_file; /*22:*/ #line 366 "./ctie.w" { register int c; register char*k; if(feof(fp)) /*23:*/ #line 394 "./ctie.w" { inp_desc->mode= ignore; inp_desc->limit= NULL; if(inp_desc->type_of_file==master)input_has_ended= true; fclose(fp); return false; } /*:23*/ #line 372 "./ctie.w" inp_desc->limit= k= inp_desc->buffer; while(k<=inp_desc->buffer_end&&(c= getc(fp))!=EOF&&c!='\n') if((*(k++)= c)!=' ')inp_desc->limit= k; if(k> inp_desc->buffer_end) if((c= getc(fp))!=EOF&&c!='\n'){ ungetc(c,fp);inp_desc->loc= inp_desc->buffer; err_print(i,"! Input line too long"); } if(c==EOF&&inp_desc->limit==inp_desc->buffer) /*23:*/ #line 394 "./ctie.w" { inp_desc->mode= ignore; inp_desc->limit= NULL; if(inp_desc->type_of_file==master)input_has_ended= true; fclose(fp); return false; } /*:23*/ #line 384 "./ctie.w" /*25:*/ #line 414 "./ctie.w" inp_desc->line++; if(inp_desc->type_of_file==master&&inp_desc->line%100==0){ if(inp_desc->line%500==0)printf("%ld",inp_desc->line); else putchar('.'); fflush(stdout); } /*:25*/ #line 387 "./ctie.w" } /*:22*/ #line 346 "./ctie.w" } if(do_includes) /*28:*/ #line 467 "./ctie.w" { inp_desc->loc= inp_desc->buffer; *inp_desc->limit= ' '; if(*inp_desc->buffer=='@'&& (inp_desc->buffer[1]=='i'||inp_desc->buffer[1]=='I')){ inp_desc->loc= inp_desc->buffer+2; *inp_desc->limit= '"'; while(*inp_desc->loc==' '||*inp_desc->loc=='\t') inp_desc->loc++; if(inp_desc->loc>=inp_desc->limit){ err_print(i,"! Include file name not given"); goto restart; } if(total_include_files>=max_include_files){ err_print(i,"! Too many nested includes"); goto restart; } total_include_files++; /*29:*/ #line 507 "./ctie.w" { include_description*new_inc; #line 166 "./ctie-k.ch" char*file_name_end; string fullname; char*k; #line 514 "./ctie.w" new_inc= (include_description*)malloc(sizeof(include_description)); if(new_inc==NULL) fatal_error(i,"! No memory for new include descriptor",""); new_inc->line= 0; k= new_inc->file_name; file_name_end= k+max_file_name_length-1; if(*inp_desc->loc=='"'){ inp_desc->loc++; while(*inp_desc->loc!='"'&&k<=file_name_end) *k++= *inp_desc->loc++; if(inp_desc->loc==inp_desc->limit) k= file_name_end+1; }else while(*inp_desc->loc!=' '&&*inp_desc->loc!='\t'&& *inp_desc->loc!='"'&&k<=file_name_end)*k++= *inp_desc->loc++; if(k> file_name_end)too_long(); *k= '\0'; #line 174 "./ctie-k.ch" fullname= kpse_find_cweb(new_inc->file_name); if(fullname) new_inc->the_file= fopen(fullname,"r"); if(fullname!=NULL&&new_inc->the_file!=NULL){ free(fullname); #line 535 "./ctie.w" new_inc->parent= inp_desc->current_include; inp_desc->current_include= new_inc; goto restart; } #line 563 "./ctie.w" total_include_files--; free(new_inc); #line 212 "./ctie-k.ch" if(fullname){ free(fullname); err_print(i,"! Cannot open include file"); }else err_print(i,"! Cannot find include file"); #line 566 "./ctie.w" goto restart; } /*:29*/ #line 488 "./ctie.w" ; } } /*:28*/ #line 351 "./ctie.w" return true; }