| OLD | NEW |
| 1 /* crypto/asn1/asn1_lib.c */ | 1 /* crypto/asn1/asn1_lib.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 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 { | 333 { |
| 334 c->error=ERR_R_ASN1_LENGTH_MISMATCH; | 334 c->error=ERR_R_ASN1_LENGTH_MISMATCH; |
| 335 return(0); | 335 return(0); |
| 336 } | 336 } |
| 337 if (c->inf == (1|V_ASN1_CONSTRUCTED)) | 337 if (c->inf == (1|V_ASN1_CONSTRUCTED)) |
| 338 c->slen= *length+ *(c->pp)-c->p; | 338 c->slen= *length+ *(c->pp)-c->p; |
| 339 c->eos=0; | 339 c->eos=0; |
| 340 return(1); | 340 return(1); |
| 341 } | 341 } |
| 342 | 342 |
| 343 ASN1_STRING *ASN1_STRING_dup(ASN1_STRING *str) | 343 int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str) |
| 344 » { |
| 345 » if (str == NULL) |
| 346 » » return 0; |
| 347 » dst->type = str->type; |
| 348 » if (!ASN1_STRING_set(dst,str->data,str->length)) |
| 349 » » return 0; |
| 350 » dst->flags = str->flags; |
| 351 » return 1; |
| 352 » } |
| 353 |
| 354 ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *str) |
| 344 { | 355 { |
| 345 ASN1_STRING *ret; | 356 ASN1_STRING *ret; |
| 346 | 357 » if (!str) |
| 347 » if (str == NULL) return(NULL); | 358 » » return NULL; |
| 348 » if ((ret=ASN1_STRING_type_new(str->type)) == NULL) | 359 » ret=ASN1_STRING_new(); |
| 349 » » return(NULL); | 360 » if (!ret) |
| 350 » if (!ASN1_STRING_set(ret,str->data,str->length)) | 361 » » return NULL; |
| 362 » if (!ASN1_STRING_copy(ret,str)) |
| 351 { | 363 { |
| 352 ASN1_STRING_free(ret); | 364 ASN1_STRING_free(ret); |
| 353 » » return(NULL); | 365 » » return NULL; |
| 354 } | 366 } |
| 355 » ret->flags = str->flags; | 367 » return ret; |
| 356 » return(ret); | |
| 357 } | 368 } |
| 358 | 369 |
| 359 int ASN1_STRING_set(ASN1_STRING *str, const void *_data, int len) | 370 int ASN1_STRING_set(ASN1_STRING *str, const void *_data, int len) |
| 360 { | 371 { |
| 361 unsigned char *c; | 372 unsigned char *c; |
| 362 const char *data=_data; | 373 const char *data=_data; |
| 363 | 374 |
| 364 if (len < 0) | 375 if (len < 0) |
| 365 { | 376 { |
| 366 if (data == NULL) | 377 if (data == NULL) |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 ret->length=0; | 431 ret->length=0; |
| 421 ret->type=type; | 432 ret->type=type; |
| 422 ret->data=NULL; | 433 ret->data=NULL; |
| 423 ret->flags=0; | 434 ret->flags=0; |
| 424 return(ret); | 435 return(ret); |
| 425 } | 436 } |
| 426 | 437 |
| 427 void ASN1_STRING_free(ASN1_STRING *a) | 438 void ASN1_STRING_free(ASN1_STRING *a) |
| 428 { | 439 { |
| 429 if (a == NULL) return; | 440 if (a == NULL) return; |
| 430 » if (a->data != NULL) OPENSSL_free(a->data); | 441 » if (a->data && !(a->flags & ASN1_STRING_FLAG_NDEF)) |
| 442 » » OPENSSL_free(a->data); |
| 431 OPENSSL_free(a); | 443 OPENSSL_free(a); |
| 432 } | 444 } |
| 433 | 445 |
| 434 int ASN1_STRING_cmp(ASN1_STRING *a, ASN1_STRING *b) | 446 int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b) |
| 435 { | 447 { |
| 436 int i; | 448 int i; |
| 437 | 449 |
| 438 i=(a->length-b->length); | 450 i=(a->length-b->length); |
| 439 if (i == 0) | 451 if (i == 0) |
| 440 { | 452 { |
| 441 i=memcmp(a->data,b->data,a->length); | 453 i=memcmp(a->data,b->data,a->length); |
| 442 if (i == 0) | 454 if (i == 0) |
| 443 return(a->type-b->type); | 455 return(a->type-b->type); |
| 444 else | 456 else |
| 445 return(i); | 457 return(i); |
| 446 } | 458 } |
| 447 else | 459 else |
| 448 return(i); | 460 return(i); |
| 449 } | 461 } |
| 450 | 462 |
| 451 void asn1_add_error(const unsigned char *address, int offset) | 463 void asn1_add_error(const unsigned char *address, int offset) |
| 452 { | 464 { |
| 453 char buf1[DECIMAL_SIZE(address)+1],buf2[DECIMAL_SIZE(offset)+1]; | 465 char buf1[DECIMAL_SIZE(address)+1],buf2[DECIMAL_SIZE(offset)+1]; |
| 454 | 466 |
| 455 BIO_snprintf(buf1,sizeof buf1,"%lu",(unsigned long)address); | 467 BIO_snprintf(buf1,sizeof buf1,"%lu",(unsigned long)address); |
| 456 BIO_snprintf(buf2,sizeof buf2,"%d",offset); | 468 BIO_snprintf(buf2,sizeof buf2,"%d",offset); |
| 457 ERR_add_error_data(4,"address=",buf1," offset=",buf2); | 469 ERR_add_error_data(4,"address=",buf1," offset=",buf2); |
| 458 } | 470 } |
| 459 | 471 |
| 460 int ASN1_STRING_length(ASN1_STRING *x) | 472 int ASN1_STRING_length(const ASN1_STRING *x) |
| 461 { return M_ASN1_STRING_length(x); } | 473 { return M_ASN1_STRING_length(x); } |
| 462 | 474 |
| 463 void ASN1_STRING_length_set(ASN1_STRING *x, int len) | 475 void ASN1_STRING_length_set(ASN1_STRING *x, int len) |
| 464 { M_ASN1_STRING_length_set(x, len); return; } | 476 { M_ASN1_STRING_length_set(x, len); return; } |
| 465 | 477 |
| 466 int ASN1_STRING_type(ASN1_STRING *x) | 478 int ASN1_STRING_type(ASN1_STRING *x) |
| 467 { return M_ASN1_STRING_type(x); } | 479 { return M_ASN1_STRING_type(x); } |
| 468 | 480 |
| 469 unsigned char * ASN1_STRING_data(ASN1_STRING *x) | 481 unsigned char * ASN1_STRING_data(ASN1_STRING *x) |
| 470 { return M_ASN1_STRING_data(x); } | 482 { return M_ASN1_STRING_data(x); } |
| OLD | NEW |