Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(143)

Side by Side Diff: openssl/crypto/asn1/a_object.c

Issue 9254031: Upgrade chrome's OpenSSL to same version Android ships with. (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/openssl/
Patch Set: '' Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « openssl/crypto/asn1/a_meth.c ('k') | openssl/crypto/asn1/a_octet.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* crypto/asn1/a_object.c */ 1 /* crypto/asn1/a_object.c */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 if (num <= 0) break; 132 if (num <= 0) break;
133 num--; 133 num--;
134 c= *(p++); 134 c= *(p++);
135 if ((c == ' ') || (c == '.')) 135 if ((c == ' ') || (c == '.'))
136 break; 136 break;
137 if ((c < '0') || (c > '9')) 137 if ((c < '0') || (c > '9'))
138 { 138 {
139 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_INVALID_DI GIT); 139 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_INVALID_DI GIT);
140 goto err; 140 goto err;
141 } 141 }
142 » » » if (!use_bn && l > (ULONG_MAX / 10L)) 142 » » » if (!use_bn && l >= ((ULONG_MAX - 80) / 10L))
143 { 143 {
144 use_bn = 1; 144 use_bn = 1;
145 if (!bl) 145 if (!bl)
146 bl = BN_new(); 146 bl = BN_new();
147 if (!bl || !BN_set_word(bl, l)) 147 if (!bl || !BN_set_word(bl, l))
148 goto err; 148 goto err;
149 } 149 }
150 if (use_bn) 150 if (use_bn)
151 { 151 {
152 if (!BN_mul_word(bl, 10L) 152 if (!BN_mul_word(bl, 10L)
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 if (tag != V_ASN1_OBJECT) 274 if (tag != V_ASN1_OBJECT)
275 { 275 {
276 i=ASN1_R_EXPECTING_AN_OBJECT; 276 i=ASN1_R_EXPECTING_AN_OBJECT;
277 goto err; 277 goto err;
278 } 278 }
279 ret = c2i_ASN1_OBJECT(a, &p, len); 279 ret = c2i_ASN1_OBJECT(a, &p, len);
280 if(ret) *pp = p; 280 if(ret) *pp = p;
281 return ret; 281 return ret;
282 err: 282 err:
283 ASN1err(ASN1_F_D2I_ASN1_OBJECT,i); 283 ASN1err(ASN1_F_D2I_ASN1_OBJECT,i);
284 if ((ret != NULL) && ((a == NULL) || (*a != ret)))
285 ASN1_OBJECT_free(ret);
286 return(NULL); 284 return(NULL);
287 } 285 }
288 ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, 286 ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
289 long len) 287 long len)
290 { 288 {
291 ASN1_OBJECT *ret=NULL; 289 ASN1_OBJECT *ret=NULL;
292 const unsigned char *p; 290 const unsigned char *p;
291 unsigned char *data;
293 int i; 292 int i;
294 /* Sanity check OID encoding: can't have leading 0x80 in 293 /* Sanity check OID encoding: can't have leading 0x80 in
295 * subidentifiers, see: X.690 8.19.2 294 * subidentifiers, see: X.690 8.19.2
296 */ 295 */
297 » for (i = 0, p = *pp + 1; i < len - 1; i++, p++) 296 » for (i = 0, p = *pp; i < len; i++, p++)
298 { 297 {
299 if (*p == 0x80 && (!i || !(p[-1] & 0x80))) 298 if (*p == 0x80 && (!i || !(p[-1] & 0x80)))
300 { 299 {
301 ASN1err(ASN1_F_C2I_ASN1_OBJECT,ASN1_R_INVALID_OBJECT_ENC ODING); 300 ASN1err(ASN1_F_C2I_ASN1_OBJECT,ASN1_R_INVALID_OBJECT_ENC ODING);
302 return NULL; 301 return NULL;
303 } 302 }
304 } 303 }
305 304
306 /* only the ASN1_OBJECTs from the 'table' will have values 305 /* only the ASN1_OBJECTs from the 'table' will have values
307 * for ->sn or ->ln */ 306 * for ->sn or ->ln */
308 if ((a == NULL) || ((*a) == NULL) || 307 if ((a == NULL) || ((*a) == NULL) ||
309 !((*a)->flags & ASN1_OBJECT_FLAG_DYNAMIC)) 308 !((*a)->flags & ASN1_OBJECT_FLAG_DYNAMIC))
310 { 309 {
311 if ((ret=ASN1_OBJECT_new()) == NULL) return(NULL); 310 if ((ret=ASN1_OBJECT_new()) == NULL) return(NULL);
312 } 311 }
313 else ret=(*a); 312 else ret=(*a);
314 313
315 p= *pp; 314 p= *pp;
316 » if ((ret->data == NULL) || (ret->length < len)) 315 » /* detach data from object */
316 » data = (unsigned char *)ret->data;
317 » ret->data = NULL;
318 » /* once detached we can change it */
319 » if ((data == NULL) || (ret->length < len))
317 { 320 {
318 » » if (ret->data != NULL) OPENSSL_free(ret->data); 321 » » ret->length=0;
319 » » ret->data=(unsigned char *)OPENSSL_malloc(len ? (int)len : 1); 322 » » if (data != NULL) OPENSSL_free(data);
323 » » data=(unsigned char *)OPENSSL_malloc(len ? (int)len : 1);
324 » » if (data == NULL)
325 » » » { i=ERR_R_MALLOC_FAILURE; goto err; }
320 ret->flags|=ASN1_OBJECT_FLAG_DYNAMIC_DATA; 326 ret->flags|=ASN1_OBJECT_FLAG_DYNAMIC_DATA;
321 if (ret->data == NULL)
322 { i=ERR_R_MALLOC_FAILURE; goto err; }
323 } 327 }
324 » memcpy(ret->data,p,(int)len); 328 » memcpy(data,p,(int)len);
329 » /* reattach data to object, after which it remains const */
330 » ret->data =data;
325 ret->length=(int)len; 331 ret->length=(int)len;
326 ret->sn=NULL; 332 ret->sn=NULL;
327 ret->ln=NULL; 333 ret->ln=NULL;
328 /* ret->flags=ASN1_OBJECT_FLAG_DYNAMIC; we know it is dynamic */ 334 /* ret->flags=ASN1_OBJECT_FLAG_DYNAMIC; we know it is dynamic */
329 p+=len; 335 p+=len;
330 336
331 if (a != NULL) (*a)=ret; 337 if (a != NULL) (*a)=ret;
332 *pp=p; 338 *pp=p;
333 return(ret); 339 return(ret);
334 err: 340 err:
(...skipping 28 matching lines...) Expand all
363 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS) 369 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS)
364 { 370 {
365 #ifndef CONST_STRICT /* disable purely for compile-time strict const checking. D oing this on a "real" compile will cause memory leaks */ 371 #ifndef CONST_STRICT /* disable purely for compile-time strict const checking. D oing this on a "real" compile will cause memory leaks */
366 if (a->sn != NULL) OPENSSL_free((void *)a->sn); 372 if (a->sn != NULL) OPENSSL_free((void *)a->sn);
367 if (a->ln != NULL) OPENSSL_free((void *)a->ln); 373 if (a->ln != NULL) OPENSSL_free((void *)a->ln);
368 #endif 374 #endif
369 a->sn=a->ln=NULL; 375 a->sn=a->ln=NULL;
370 } 376 }
371 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) 377 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA)
372 { 378 {
373 » » if (a->data != NULL) OPENSSL_free(a->data); 379 » » if (a->data != NULL) OPENSSL_free((void *)a->data);
374 a->data=NULL; 380 a->data=NULL;
375 a->length=0; 381 a->length=0;
376 } 382 }
377 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC) 383 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC)
378 OPENSSL_free(a); 384 OPENSSL_free(a);
379 } 385 }
380 386
381 ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, 387 ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len,
382 const char *sn, const char *ln) 388 const char *sn, const char *ln)
383 { 389 {
384 ASN1_OBJECT o; 390 ASN1_OBJECT o;
385 391
386 o.sn=sn; 392 o.sn=sn;
387 o.ln=ln; 393 o.ln=ln;
388 o.data=data; 394 o.data=data;
389 o.nid=nid; 395 o.nid=nid;
390 o.length=len; 396 o.length=len;
391 o.flags=ASN1_OBJECT_FLAG_DYNAMIC|ASN1_OBJECT_FLAG_DYNAMIC_STRINGS| 397 o.flags=ASN1_OBJECT_FLAG_DYNAMIC|ASN1_OBJECT_FLAG_DYNAMIC_STRINGS|
392 ASN1_OBJECT_FLAG_DYNAMIC_DATA; 398 ASN1_OBJECT_FLAG_DYNAMIC_DATA;
393 return(OBJ_dup(&o)); 399 return(OBJ_dup(&o));
394 } 400 }
395 401
396 IMPLEMENT_STACK_OF(ASN1_OBJECT) 402 IMPLEMENT_STACK_OF(ASN1_OBJECT)
397 IMPLEMENT_ASN1_SET_OF(ASN1_OBJECT) 403 IMPLEMENT_ASN1_SET_OF(ASN1_OBJECT)
OLDNEW
« no previous file with comments | « openssl/crypto/asn1/a_meth.c ('k') | openssl/crypto/asn1/a_octet.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698