diff options
Diffstat (limited to 'src/lib/libcrypto/x509v3/v3_pci.c')
| -rw-r--r-- | src/lib/libcrypto/x509v3/v3_pci.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/lib/libcrypto/x509v3/v3_pci.c b/src/lib/libcrypto/x509v3/v3_pci.c index 601211f416..0dcfa004fe 100644 --- a/src/lib/libcrypto/x509v3/v3_pci.c +++ b/src/lib/libcrypto/x509v3/v3_pci.c | |||
| @@ -82,7 +82,7 @@ static int process_pci_value(CONF_VALUE *val, | |||
| 82 | { | 82 | { |
| 83 | if (*language) | 83 | if (*language) |
| 84 | { | 84 | { |
| 85 | X509V3err(X509V3_F_PROCESS_PCI_VALUE,X509V3_R_POLICY_LANGUAGE_ALREADTY_DEFINED); | 85 | X509V3err(X509V3_F_PROCESS_PCI_VALUE,X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED); |
| 86 | X509V3_conf_err(val); | 86 | X509V3_conf_err(val); |
| 87 | return 0; | 87 | return 0; |
| 88 | } | 88 | } |
| @@ -97,7 +97,7 @@ static int process_pci_value(CONF_VALUE *val, | |||
| 97 | { | 97 | { |
| 98 | if (*pathlen) | 98 | if (*pathlen) |
| 99 | { | 99 | { |
| 100 | X509V3err(X509V3_F_PROCESS_PCI_VALUE,X509V3_R_POLICY_PATH_LENGTH_ALREADTY_DEFINED); | 100 | X509V3err(X509V3_F_PROCESS_PCI_VALUE,X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED); |
| 101 | X509V3_conf_err(val); | 101 | X509V3_conf_err(val); |
| 102 | return 0; | 102 | return 0; |
| 103 | } | 103 | } |
| @@ -128,7 +128,12 @@ static int process_pci_value(CONF_VALUE *val, | |||
| 128 | unsigned char *tmp_data2 = | 128 | unsigned char *tmp_data2 = |
| 129 | string_to_hex(val->value + 4, &val_len); | 129 | string_to_hex(val->value + 4, &val_len); |
| 130 | 130 | ||
| 131 | if (!tmp_data2) goto err; | 131 | if (!tmp_data2) |
| 132 | { | ||
| 133 | X509V3err(X509V3_F_PROCESS_PCI_VALUE,X509V3_R_ILLEGAL_HEX_DIGIT); | ||
| 134 | X509V3_conf_err(val); | ||
| 135 | goto err; | ||
| 136 | } | ||
| 132 | 137 | ||
| 133 | tmp_data = OPENSSL_realloc((*policy)->data, | 138 | tmp_data = OPENSSL_realloc((*policy)->data, |
| 134 | (*policy)->length + val_len + 1); | 139 | (*policy)->length + val_len + 1); |
| @@ -140,6 +145,17 @@ static int process_pci_value(CONF_VALUE *val, | |||
| 140 | (*policy)->length += val_len; | 145 | (*policy)->length += val_len; |
| 141 | (*policy)->data[(*policy)->length] = '\0'; | 146 | (*policy)->data[(*policy)->length] = '\0'; |
| 142 | } | 147 | } |
| 148 | else | ||
| 149 | { | ||
| 150 | OPENSSL_free(tmp_data2); | ||
| 151 | /* realloc failure implies the original data space is b0rked too! */ | ||
| 152 | (*policy)->data = NULL; | ||
| 153 | (*policy)->length = 0; | ||
| 154 | X509V3err(X509V3_F_PROCESS_PCI_VALUE,ERR_R_MALLOC_FAILURE); | ||
| 155 | X509V3_conf_err(val); | ||
| 156 | goto err; | ||
| 157 | } | ||
| 158 | OPENSSL_free(tmp_data2); | ||
| 143 | } | 159 | } |
| 144 | else if (strncmp(val->value, "file:", 5) == 0) | 160 | else if (strncmp(val->value, "file:", 5) == 0) |
| 145 | { | 161 | { |
| @@ -169,6 +185,7 @@ static int process_pci_value(CONF_VALUE *val, | |||
| 169 | (*policy)->length += n; | 185 | (*policy)->length += n; |
| 170 | (*policy)->data[(*policy)->length] = '\0'; | 186 | (*policy)->data[(*policy)->length] = '\0'; |
| 171 | } | 187 | } |
| 188 | BIO_free_all(b); | ||
| 172 | 189 | ||
| 173 | if (n < 0) | 190 | if (n < 0) |
| 174 | { | 191 | { |
| @@ -190,6 +207,15 @@ static int process_pci_value(CONF_VALUE *val, | |||
| 190 | (*policy)->length += val_len; | 207 | (*policy)->length += val_len; |
| 191 | (*policy)->data[(*policy)->length] = '\0'; | 208 | (*policy)->data[(*policy)->length] = '\0'; |
| 192 | } | 209 | } |
| 210 | else | ||
| 211 | { | ||
| 212 | /* realloc failure implies the original data space is b0rked too! */ | ||
| 213 | (*policy)->data = NULL; | ||
| 214 | (*policy)->length = 0; | ||
| 215 | X509V3err(X509V3_F_PROCESS_PCI_VALUE,ERR_R_MALLOC_FAILURE); | ||
| 216 | X509V3_conf_err(val); | ||
| 217 | goto err; | ||
| 218 | } | ||
| 193 | } | 219 | } |
| 194 | else | 220 | else |
| 195 | { | 221 | { |
