Unified · Split
| @@ -1,3 +1,5 @@ | ||
| 1 | +20090730 | |
| 2 | + improve the error checking in strtosk and strtopk to help detect mangled or inappropriate keys | |
| 1 | 3 | 20090728 |
| 2 | 4 | emu/port/main.c: put host's working directory name as emuwdir |
| 3 | 5 | document initial environment variables in emu(1) |
| @@ -1 +1 @@ | ||
| 1 | −#define VERSION "Fourth Edition (20090728)" | |
| 1 | +#define VERSION "Fourth Edition (20090730)" | |
| @@ -177,6 +177,8 @@ base64tobig(char *str, char **strp) · 176 unmodified lines | ||
| 177 | 177 | |
| 178 | 178 | for(p = str; *p && *p != '\n'; p++) |
| 179 | 179 | ; |
| 180 | + if(p == str) | |
| 181 | + return nil; | |
| 180 | 182 | n = dec64(hex, sizeof(hex), str, p - str); |
| 181 | 183 | b = betomp(hex, n, nil); |
| 182 | 184 | if(strp){ |
| @@ -25,6 +25,11 @@ dsa_str2sk(char *str, char **strp) · 24 unmodified lines | ||
| 25 | 25 | dsa->secret = base64tobig(p, &p); |
| 26 | 26 | if(strp) |
| 27 | 27 | *strp = p; |
| 28 | + if(dsa->pub.p == nil || dsa->pub.q == nil || | |
| 29 | + dsa->pub.alpha == nil || dsa->pub.key == nil || dsa->secret == nil){ | |
| 30 | + dsaprivfree(dsa); | |
| 31 | + return nil; | |
| 32 | + } | |
| 28 | 33 | return dsa; |
| 29 | 34 | } |
| 30 | 35 | |
| @@ -41,6 +46,10 @@ dsa_str2pk(char *str, char **strp) · 10 unmodified lines | ||
| 41 | 46 | dsa->key = base64tobig(p, &p); |
| 42 | 47 | if(strp) |
| 43 | 48 | *strp = p; |
| 49 | + if(dsa->p == nil || dsa->q == nil || dsa->alpha == nil || dsa->key == nil){ | |
| 50 | + dsapubfree(dsa); | |
| 51 | + return nil; | |
| 52 | + } | |
| 44 | 53 | return dsa; |
| 45 | 54 | } |
| 46 | 55 | |
| @@ -55,6 +64,10 @@ dsa_str2sig(char *str, char **strp) · 8 unmodified lines | ||
| 55 | 64 | dsa->s = base64tobig(p, &p); |
| 56 | 65 | if(strp) |
| 57 | 66 | *strp = p; |
| 67 | + if(dsa->r == nil || dsa->s == nil){ | |
| 68 | + dsasigfree(dsa); | |
| 69 | + return nil; | |
| 70 | + } | |
| 58 | 71 | return dsa; |
| 59 | 72 | } |
| 60 | 73 | |
| @@ -24,6 +24,10 @@ eg_str2sk(char *str, char **strp) · 23 unmodified lines | ||
| 24 | 24 | eg->secret = base64tobig(p, &p); |
| 25 | 25 | if(strp) |
| 26 | 26 | *strp = p; |
| 27 | + if(eg->pub.p == nil || eg->pub.alpha == nil || eg->pub.key == nil || eg->secret == nil){ | |
| 28 | + egprivfree(eg); | |
| 29 | + return nil; | |
| 30 | + } | |
| 27 | 31 | return eg; |
| 28 | 32 | } |
| 29 | 33 | |
| @@ -39,6 +43,10 @@ eg_str2pk(char *str, char **strp) · 9 unmodified lines | ||
| 39 | 43 | eg->key = base64tobig(p, &p); |
| 40 | 44 | if(strp) |
| 41 | 45 | *strp = p; |
| 46 | + if(eg->p == nil || eg->alpha == nil || eg->key == nil){ | |
| 47 | + egpubfree(eg); | |
| 48 | + return nil; | |
| 49 | + } | |
| 42 | 50 | return eg; |
| 43 | 51 | } |
| 44 | 52 | |
| @@ -53,6 +61,10 @@ eg_str2sig(char *str, char **strp) · 8 unmodified lines | ||
| 53 | 61 | eg->s = base64tobig(p, &p); |
| 54 | 62 | if(strp) |
| 55 | 63 | *strp = p; |
| 64 | + if(eg->r == nil || eg->s == nil){ | |
| 65 | + egsigfree(eg); | |
| 66 | + return nil; | |
| 67 | + } | |
| 56 | 68 | return eg; |
| 57 | 69 | } |
| 58 | 70 | |
| @@ -28,6 +28,12 @@ rsa_str2sk(char *str, char **strp) · 27 unmodified lines | ||
| 28 | 28 | rsa->c2 = base64tobig(p, &p); |
| 29 | 29 | if(strp) |
| 30 | 30 | *strp = p; |
| 31 | + if(rsa->pub.n == nil || rsa->pub.ek == nil || | |
| 32 | + rsa->dk == nil || rsa->p == nil || rsa->q == nil || | |
| 33 | + rsa->kp == nil || rsa->kq == nil || rsa->c2 == nil){ | |
| 34 | + rsaprivfree(rsa); | |
| 35 | + return nil; | |
| 36 | + } | |
| 31 | 37 | |
| 32 | 38 | return rsa; |
| 33 | 39 | } |
| @@ -43,6 +49,10 @@ rsa_str2pk(char *str, char **strp) · 9 unmodified lines | ||
| 43 | 49 | rsa->ek = base64tobig(p, &p); |
| 44 | 50 | if(strp) |
| 45 | 51 | *strp = p; |
| 52 | + if(rsa->n == nil || rsa->ek == nil){ | |
| 53 | + rsapubfree(rsa); | |
| 54 | + return nil; | |
| 55 | + } | |
| 46 | 56 | |
| 47 | 57 | return rsa; |
| 48 | 58 | } |
| @@ -54,6 +64,8 @@ rsa_str2sig(char *str, char **strp) · 5 unmodified lines | ||
| 54 | 64 | char *p; |
| 55 | 65 | |
| 56 | 66 | rsa = base64tobig(str, &p); |
| 67 | + if(rsa == nil) | |
| 68 | + return nil; | |
| 57 | 69 | if(strp) |
| 58 | 70 | *strp = p; |
| 59 | 71 | return rsa; |