Codebase list pgpdump / b32f230
Update keys.c 2022-03-01: insert "memset" where ELLIP_CURVES are evaluated to re-initialize the "oid_input_HEX" array to all zero; left as it was, multiple different ECC curve evaluations may leave remnants of earlier read input values which can cause "memcpy" to fail (for "invalid/undefined/unmatched values") -> segfault; most notable when evaluating "keys" with a plethora of packets with different ECC algorithms galaxiesFarApart authored 2 years ago Kazu Yamamoto committed 2 years ago
1 changed file(s) with 6 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
124124 break;
125125 case 18:/*ECDH*/
126126 oidLEN = Getc();
127 memset(oid_input_HEX,0,10);
127128 for(jj=0;jj<oidLEN;jj++){oid_input_HEX[jj]=Getc();}
128129 for(jj=0;jj<ELLIP_CURVES_NUM;jj++){
129130 if(memcmp(ELLIP_CURVES[jj].oidhex,oid_input_HEX,oid_input_HEX_size) == 0){
165166 break;
166167 case 19:/*ECDSA*/
167168 oidLEN = Getc();
169 memset(oid_input_HEX,0,10);
168170 for(jj=0;jj<oidLEN;jj++){oid_input_HEX[jj]=Getc();}
169171 for(jj=0;jj<ELLIP_CURVES_NUM;jj++){
170172 if(memcmp(ELLIP_CURVES[jj].oidhex,oid_input_HEX,oid_input_HEX_size) == 0){
187189 break;
188190 case 22:/*EdDSA*/
189191 oidLEN = Getc();
192 memset(oid_input_HEX,0,10);
190193 for(jj=0;jj<oidLEN;jj++){oid_input_HEX[jj]=Getc();}
191194 for(jj=0;jj<ELLIP_CURVES_NUM;jj++){
192195 if(memcmp(ELLIP_CURVES[jj].oidhex,oid_input_HEX,oid_input_HEX_size) == 0){
303306 break;
304307 case 18:/*ECDH*/
305308 oidLEN = Getc();
309 memset(oid_input_HEX,0,10);
306310 for(jj=0;jj<oidLEN;jj++){oid_input_HEX[jj]=Getc();}
307311 for(jj=0;jj<ELLIP_CURVES_NUM;jj++){
308312 if(memcmp(ELLIP_CURVES[jj].oidhex,oid_input_HEX,oid_input_HEX_size) == 0){
344348 break;
345349 case 19:/*ECDSA*/
346350 oidLEN = Getc();
351 memset(oid_input_HEX,0,10);
347352 for(jj=0;jj<oidLEN;jj++){oid_input_HEX[jj]=Getc();}
348353 for(jj=0;jj<ELLIP_CURVES_NUM;jj++){
349354 if(memcmp(ELLIP_CURVES[jj].oidhex,oid_input_HEX,oid_input_HEX_size) == 0){
366371 break;
367372 case 22:/*EdDSA*/
368373 oidLEN = Getc();
374 memset(oid_input_HEX,0,10);
369375 for(jj=0;jj<oidLEN;jj++){oid_input_HEX[jj]=Getc();}
370376 for(jj=0;jj<ELLIP_CURVES_NUM;jj++){
371377 if(memcmp(ELLIP_CURVES[jj].oidhex,oid_input_HEX,oid_input_HEX_size) == 0){