Use strdup instead of hand-rolling one. Index: src/crypto/objects/obj_lib.c =================================================================== RCS file: /backup/mirrors/cvsync/src/lib/libssl/src/crypto/objects/obj_lib.c,v retrieving revision 1.8 diff -u -p -u -r1.8 obj_lib.c --- src/crypto/objects/obj_lib.c 19 Apr 2014 16:42:26 -0000 1.8 +++ src/crypto/objects/obj_lib.c 25 May 2014 11:56:46 -0000 @@ -67,7 +67,6 @@ OBJ_dup(const ASN1_OBJECT *o) { ASN1_OBJECT *r; int i; - char *ln = NULL, *sn = NULL; unsigned char *data = NULL; if (o == NULL) @@ -92,21 +91,15 @@ OBJ_dup(const ASN1_OBJECT *o) r->nid = o->nid; r->ln = r->sn = NULL; if (o->ln != NULL) { - i = strlen(o->ln) + 1; - ln = malloc(i); - if (ln == NULL) + r->ln = strdup(o->ln); + if (r->ln == NULL) goto err; - memcpy(ln, o->ln, i); - r->ln = ln; } if (o->sn != NULL) { - i = strlen(o->sn) + 1; - sn = malloc(i); - if (sn == NULL) + r->sn = strdup(o->sn); + if (r->sn == NULL) goto err; - memcpy(sn, o->sn, i); - r->sn = sn; } r->flags = o->flags | (ASN1_OBJECT_FLAG_DYNAMIC | ASN1_OBJECT_FLAG_DYNAMIC_STRINGS | ASN1_OBJECT_FLAG_DYNAMIC_DATA);