crypto/pkcs7/pk7_smime.c:378: error: NULL_DEREFERENCE
  pointer `p7bio` last assigned on line 329 could be null and is dereferenced by call to `BIO_free()` at line 378, column 2.
Showing all 47 steps of the trace


crypto/pkcs7/pk7_smime.c:325:1: start of procedure PKCS7_encrypt()
323.   /* Build a complete PKCS#7 enveloped data */
324.   
325. > PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, EVP_CIPHER *cipher,
326.   								int flags)
327.   {

crypto/pkcs7/pk7_smime.c:329:2: 
327.   {
328.   	PKCS7 *p7;
329. > 	BIO *p7bio = NULL;
330.   	int i;
331.   	X509 *x509;

crypto/pkcs7/pk7_smime.c:332:2: 
330.   	int i;
331.   	X509 *x509;
332. > 	static char txthdr[] = "Content-type: text/plain\r\n\r\n";
333.   	if(!(p7 = PKCS7_new())) {
334.   		PKCS7err(PKCS7_F_PKCS7_ENCRYPT,ERR_R_MALLOC_FAILURE);

crypto/pkcs7/pk7_smime.c:333:7: Taking false branch
331.   	X509 *x509;
332.   	static char txthdr[] = "Content-type: text/plain\r\n\r\n";
333.   	if(!(p7 = PKCS7_new())) {
             ^
334.   		PKCS7err(PKCS7_F_PKCS7_ENCRYPT,ERR_R_MALLOC_FAILURE);
335.   		return NULL;

crypto/pkcs7/pk7_smime.c:338:2: 
336.   	}
337.   
338. > 	PKCS7_set_type(p7, NID_pkcs7_enveloped);
339.   	if(!PKCS7_set_cipher(p7, cipher)) {
340.   		PKCS7err(PKCS7_F_PKCS7_ENCRYPT,PKCS7_R_ERROR_SETTING_CIPHER);

crypto/pkcs7/pk7_lib.c:143:1: start of procedure PKCS7_set_type()
  141.   	}
  142.   
  143. > int PKCS7_set_type(PKCS7 *p7, int type)
  144.   	{
  145.   	ASN1_OBJECT *obj;

crypto/pkcs7/pk7_lib.c:147:2: Skipping PKCS7_content_free(): empty list of specs
  145.   	ASN1_OBJECT *obj;
  146.   
  147.   	PKCS7_content_free(p7);
          ^
  148.   	obj=OBJ_nid2obj(type); /* will not fail */
  149.   

crypto/pkcs7/pk7_lib.c:148:2: 
  146.   
  147.   	PKCS7_content_free(p7);
  148. > 	obj=OBJ_nid2obj(type); /* will not fail */
  149.   
  150.   	switch (type)

crypto/objects/obj_dat.c:254:1: start of procedure OBJ_nid2obj()
    252.   	}
    253.   
    254. > ASN1_OBJECT *OBJ_nid2obj(int n)
    255.   	{
    256.   	ADDED_OBJ ad,*adp;

crypto/objects/obj_dat.c:259:7: Taking true branch
    257.   	ASN1_OBJECT ob;
    258.   
    259.   	if ((n >= 0) && (n < NUM_NID))
                 ^
    260.   		{
    261.   		if ((n != NID_undef) && (nid_objs[n].nid == NID_undef))

crypto/objects/obj_dat.c:259:19: Taking true branch
    257.   	ASN1_OBJECT ob;
    258.   
    259.   	if ((n >= 0) && (n < NUM_NID))
                             ^
    260.   		{
    261.   		if ((n != NID_undef) && (nid_objs[n].nid == NID_undef))

crypto/objects/obj_dat.c:261:8: Taking true branch
    259.   	if ((n >= 0) && (n < NUM_NID))
    260.   		{
    261.   		if ((n != NID_undef) && (nid_objs[n].nid == NID_undef))
                  ^
    262.   			{
    263.   			OBJerr(OBJ_F_OBJ_NID2OBJ,OBJ_R_UNKNOWN_NID);

crypto/objects/obj_dat.c:261:28: Taking false branch
    259.   	if ((n >= 0) && (n < NUM_NID))
    260.   		{
    261.   		if ((n != NID_undef) && (nid_objs[n].nid == NID_undef))
                                      ^
    262.   			{
    263.   			OBJerr(OBJ_F_OBJ_NID2OBJ,OBJ_R_UNKNOWN_NID);

crypto/objects/obj_dat.c:266:3: 
    264.   			return(NULL);
    265.   			}
    266. > 		return((ASN1_OBJECT *)&(nid_objs[n]));
    267.   		}
    268.   	else if (added == NULL)

crypto/objects/obj_dat.c:284:2: return from a call to OBJ_nid2obj
    282.   			}
    283.   		}
    284.   	}
            ^
    285.   
    286.   const char *OBJ_nid2sn(int n)

crypto/pkcs7/pk7_lib.c:150:2: 
  148.   	obj=OBJ_nid2obj(type); /* will not fail */
  149.   
  150. > 	switch (type)
  151.   		{
  152.   	case NID_pkcs7_signed:

crypto/pkcs7/pk7_lib.c:152:2: Switch condition is false. Skipping switch case
  150.   	switch (type)
  151.   		{
  152.   	case NID_pkcs7_signed:
          ^
  153.   		p7->type=obj;
  154.   		if ((p7->d.sign=PKCS7_SIGNED_new()) == NULL)

crypto/pkcs7/pk7_lib.c:158:2: Switch condition is false. Skipping switch case
  156.   		ASN1_INTEGER_set(p7->d.sign->version,1);
  157.   		break;
  158.   	case NID_pkcs7_data:
          ^
  159.   		p7->type=obj;
  160.   		if ((p7->d.data=M_ASN1_OCTET_STRING_new()) == NULL)

crypto/pkcs7/pk7_lib.c:163:2: Switch condition is false. Skipping switch case
  161.   			goto err;
  162.   		break;
  163.   	case NID_pkcs7_signedAndEnveloped:
          ^
  164.   		p7->type=obj;
  165.   		if ((p7->d.signed_and_enveloped=PKCS7_SIGN_ENVELOPE_new())

crypto/pkcs7/pk7_lib.c:169:2: Switch condition is true. Entering switch case
  167.   		ASN1_INTEGER_set(p7->d.signed_and_enveloped->version,1);
  168.   		break;
  169.   	case NID_pkcs7_enveloped:
          ^
  170.   		p7->type=obj;
  171.   		if ((p7->d.enveloped=PKCS7_ENVELOPE_new())

crypto/pkcs7/pk7_lib.c:170:3: 
  168.   		break;
  169.   	case NID_pkcs7_enveloped:
  170. > 		p7->type=obj;
  171.   		if ((p7->d.enveloped=PKCS7_ENVELOPE_new())
  172.   			== NULL) goto err;

crypto/pkcs7/pk7_lib.c:171:7: Taking true branch
  169.   	case NID_pkcs7_enveloped:
  170.   		p7->type=obj;
  171.   		if ((p7->d.enveloped=PKCS7_ENVELOPE_new())
               ^
  172.   			== NULL) goto err;
  173.   		ASN1_INTEGER_set(p7->d.enveloped->version,0);

crypto/pkcs7/pk7_lib.c:188:1: 
  186.   		}
  187.   	return(1);
  188. > err:
  189.   	return(0);
  190.   	}

crypto/pkcs7/pk7_lib.c:189:2: 
  187.   	return(1);
  188.   err:
  189. > 	return(0);
  190.   	}
  191.   

crypto/pkcs7/pk7_lib.c:190:2: return from a call to PKCS7_set_type
  188.   err:
  189.   	return(0);
  190.   	}
          ^
  191.   
  192.   int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *psi)

crypto/pkcs7/pk7_smime.c:339:6: Taking true branch
337.   
338.   	PKCS7_set_type(p7, NID_pkcs7_enveloped);
339.   	if(!PKCS7_set_cipher(p7, cipher)) {
            ^
340.   		PKCS7err(PKCS7_F_PKCS7_ENCRYPT,PKCS7_R_ERROR_SETTING_CIPHER);
341.   		goto err;

crypto/pkcs7/pk7_smime.c:340:3: 
338.   	PKCS7_set_type(p7, NID_pkcs7_enveloped);
339.   	if(!PKCS7_set_cipher(p7, cipher)) {
340. > 		PKCS7err(PKCS7_F_PKCS7_ENCRYPT,PKCS7_R_ERROR_SETTING_CIPHER);
341.   		goto err;
342.   	}

crypto/err/err.c:246:1: start of procedure ERR_put_error()
  244.   /********************************************************/
  245.   
  246. > void ERR_put_error(int lib, int func, int reason, const char *file,
  247.   	     int line)
  248.   	{

crypto/err/err.c:270:2: Skipping ERR_get_state(): empty list of specs
  268.   	}
  269.   #endif
  270.   	es=ERR_get_state();
          ^
  271.   
  272.   	es->top=(es->top+1)%ERR_NUM_ERRORS;

crypto/err/err.c:272:2: 
  270.   	es=ERR_get_state();
  271.   
  272. > 	es->top=(es->top+1)%ERR_NUM_ERRORS;
  273.   	if (es->top == es->bottom)
  274.   		es->bottom=(es->bottom+1)%ERR_NUM_ERRORS;

crypto/err/err.c:273:6: Taking false branch
  271.   
  272.   	es->top=(es->top+1)%ERR_NUM_ERRORS;
  273.   	if (es->top == es->bottom)
              ^
  274.   		es->bottom=(es->bottom+1)%ERR_NUM_ERRORS;
  275.   	es->err_buffer[es->top]=ERR_PACK(lib,func,reason);

crypto/err/err.c:275:2: 
  273.   	if (es->top == es->bottom)
  274.   		es->bottom=(es->bottom+1)%ERR_NUM_ERRORS;
  275. > 	es->err_buffer[es->top]=ERR_PACK(lib,func,reason);
  276.   	es->err_file[es->top]=file;
  277.   	es->err_line[es->top]=line;

crypto/err/err.c:276:2: 
  274.   		es->bottom=(es->bottom+1)%ERR_NUM_ERRORS;
  275.   	es->err_buffer[es->top]=ERR_PACK(lib,func,reason);
  276. > 	es->err_file[es->top]=file;
  277.   	es->err_line[es->top]=line;
  278.   	err_clear_data(es,es->top);

crypto/err/err.c:277:2: 
  275.   	es->err_buffer[es->top]=ERR_PACK(lib,func,reason);
  276.   	es->err_file[es->top]=file;
  277. > 	es->err_line[es->top]=line;
  278.   	err_clear_data(es,es->top);
  279.   	}

crypto/err/err.c:278:2: Taking true branch
  276.   	es->err_file[es->top]=file;
  277.   	es->err_line[es->top]=line;
  278.   	err_clear_data(es,es->top);
          ^
  279.   	}
  280.   

crypto/err/err.c:278:2: Taking false branch
  276.   	es->err_file[es->top]=file;
  277.   	es->err_line[es->top]=line;
  278.   	err_clear_data(es,es->top);
          ^
  279.   	}
  280.   

crypto/err/err.c:279:2: return from a call to ERR_put_error
  277.   	es->err_line[es->top]=line;
  278.   	err_clear_data(es,es->top);
  279.   	}
          ^
  280.   
  281.   void ERR_clear_error(void)

crypto/pkcs7/pk7_smime.c:376:2: 
374.   	return p7;
375.   
376. > 	err:
377.   
378.   	BIO_free(p7bio);

crypto/pkcs7/pk7_smime.c:378:2: 
376.   	err:
377.   
378. > 	BIO_free(p7bio);
379.   	PKCS7_free(p7);
380.   	return NULL;

crypto/bio/bio_lib.c:110:1: start of procedure BIO_free()
  108.   	}
  109.   
  110. > int BIO_free(BIO *a)
  111.   	{
  112.   	int ret=0,i;

crypto/bio/bio_lib.c:112:2: 
  110.   int BIO_free(BIO *a)
  111.   	{
  112. > 	int ret=0,i;
  113.   
  114.   	if (a == NULL) return(0);

crypto/bio/bio_lib.c:114:6: Taking false branch
  112.   	int ret=0,i;
  113.   
  114.   	if (a == NULL) return(0);
              ^
  115.   
  116.   	i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_BIO);

crypto/bio/bio_lib.c:116:2: 
  114.   	if (a == NULL) return(0);
  115.   
  116. > 	i=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_BIO);
  117.   #ifdef REF_PRINT
  118.   	REF_PRINT("BIO",a);

crypto/cryptlib.c:226:1: start of procedure CRYPTO_add_lock()
    224.   	}
    225.   
    226. > int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,
    227.   	     int line)
    228.   	{

crypto/cryptlib.c:231:6: Taking true branch
    229.   	int ret;
    230.   
    231.   	if (add_lock_callback != NULL)
                ^
    232.   		{
    233.   #ifdef LOCK_DEBUG

crypto/cryptlib.c:237:3: Skipping __function_pointer__(): unresolved function pointer
    235.   #endif
    236.   
    237.   		ret=add_lock_callback(pointer,amount,type,file,line);
             ^
    238.   #ifdef LOCK_DEBUG
    239.   		fprintf(stderr,"ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n",

crypto/cryptlib.c:245:3: 
    243.   			file,line);
    244.   #endif
    245. > 		*pointer=ret;
    246.   		}
    247.   	else

PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, EVP_CIPHER *cipher,
								int flags)
{
	PKCS7 *p7;
	BIO *p7bio = NULL;
	int i;
	X509 *x509;
	static char txthdr[] = "Content-type: text/plain\r\n\r\n";
	if(!(p7 = PKCS7_new())) {
		PKCS7err(PKCS7_F_PKCS7_ENCRYPT,ERR_R_MALLOC_FAILURE);
		return NULL;
	}
	PKCS7_set_type(p7, NID_pkcs7_enveloped);
	if(!PKCS7_set_cipher(p7, cipher)) {
		PKCS7err(PKCS7_F_PKCS7_ENCRYPT,PKCS7_R_ERROR_SETTING_CIPHER);
		goto err;
	}
	for(i = 0; i < sk_X509_num(certs); i++) {
		x509 = sk_X509_value(certs, i);
		if(!PKCS7_add_recipient(p7, x509)) {
			PKCS7err(PKCS7_F_PKCS7_ENCRYPT,
					PKCS7_R_ERROR_ADDING_RECIPIENT);
			goto err;
		}
	}
	if(!(p7bio = PKCS7_dataInit(p7, NULL))) {
		PKCS7err(PKCS7_F_PKCS7_ENCRYPT,ERR_R_MALLOC_FAILURE);
		goto err;
	}
	if(flags & PKCS7_TEXT) {
		if(BIO_write(p7bio, txthdr, sizeof(txthdr) - 1) < 0) {
			goto err;
		}
	}
	SMIME_crlf_copy(in, p7bio, flags);
	BIO_flush(p7bio);
        if (!PKCS7_dataFinal(p7,p7bio)) {
		PKCS7err(PKCS7_F_PKCS7_ENCRYPT,PKCS7_R_PKCS7_DATAFINAL_ERROR);
		goto err;
	}
        BIO_free_all(p7bio);
	return p7;
	err:
	BIO_free(p7bio);
	PKCS7_free(p7);
	return NULL;
}
['PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, EVP_CIPHER *cipher,\n\t\t\t\t\t\t\t\tint flags)\n{\n\tPKCS7 *p7;\n\tBIO *p7bio = NULL;\n\tint i;\n\tX509 *x509;\n\tstatic char txthdr[] = "Content-type: text/plain\\r\\n\\r\\n";\n\tif(!(p7 = PKCS7_new())) {\n\t\tPKCS7err(PKCS7_F_PKCS7_ENCRYPT,ERR_R_MALLOC_FAILURE);\n\t\treturn NULL;\n\t}\n\tPKCS7_set_type(p7, NID_pkcs7_enveloped);\n\tif(!PKCS7_set_cipher(p7, cipher)) {\n\t\tPKCS7err(PKCS7_F_PKCS7_ENCRYPT,PKCS7_R_ERROR_SETTING_CIPHER);\n\t\tgoto err;\n\t}\n\tfor(i = 0; i < sk_X509_num(certs); i++) {\n\t\tx509 = sk_X509_value(certs, i);\n\t\tif(!PKCS7_add_recipient(p7, x509)) {\n\t\t\tPKCS7err(PKCS7_F_PKCS7_ENCRYPT,\n\t\t\t\t\tPKCS7_R_ERROR_ADDING_RECIPIENT);\n\t\t\tgoto err;\n\t\t}\n\t}\n\tif(!(p7bio = PKCS7_dataInit(p7, NULL))) {\n\t\tPKCS7err(PKCS7_F_PKCS7_ENCRYPT,ERR_R_MALLOC_FAILURE);\n\t\tgoto err;\n\t}\n\tif(flags & PKCS7_TEXT) {\n\t\tif(BIO_write(p7bio, txthdr, sizeof(txthdr) - 1) < 0) {\n\t\t\tgoto err;\n\t\t}\n\t}\n\tSMIME_crlf_copy(in, p7bio, flags);\n\tBIO_flush(p7bio);\n        if (!PKCS7_dataFinal(p7,p7bio)) {\n\t\tPKCS7err(PKCS7_F_PKCS7_ENCRYPT,PKCS7_R_PKCS7_DATAFINAL_ERROR);\n\t\tgoto err;\n\t}\n        BIO_free_all(p7bio);\n\treturn p7;\n\terr:\n\tBIO_free(p7bio);\n\tPKCS7_free(p7);\n\treturn NULL;\n}', 'int PKCS7_set_type(PKCS7 *p7, int type)\n\t{\n\tASN1_OBJECT *obj;\n\tPKCS7_content_free(p7);\n\tobj=OBJ_nid2obj(type);\n\tswitch (type)\n\t\t{\n\tcase NID_pkcs7_signed:\n\t\tp7->type=obj;\n\t\tif ((p7->d.sign=PKCS7_SIGNED_new()) == NULL)\n\t\t\tgoto err;\n\t\tASN1_INTEGER_set(p7->d.sign->version,1);\n\t\tbreak;\n\tcase NID_pkcs7_data:\n\t\tp7->type=obj;\n\t\tif ((p7->d.data=M_ASN1_OCTET_STRING_new()) == NULL)\n\t\t\tgoto err;\n\t\tbreak;\n\tcase NID_pkcs7_signedAndEnveloped:\n\t\tp7->type=obj;\n\t\tif ((p7->d.signed_and_enveloped=PKCS7_SIGN_ENVELOPE_new())\n\t\t\t== NULL) goto err;\n\t\tASN1_INTEGER_set(p7->d.signed_and_enveloped->version,1);\n\t\tbreak;\n\tcase NID_pkcs7_enveloped:\n\t\tp7->type=obj;\n\t\tif ((p7->d.enveloped=PKCS7_ENVELOPE_new())\n\t\t\t== NULL) goto err;\n\t\tASN1_INTEGER_set(p7->d.enveloped->version,0);\n\t\tbreak;\n\tcase NID_pkcs7_encrypted:\n\t\tp7->type=obj;\n\t\tif ((p7->d.encrypted=PKCS7_ENCRYPT_new())\n\t\t\t== NULL) goto err;\n\t\tASN1_INTEGER_set(p7->d.encrypted->version,0);\n\t\tbreak;\n\tcase NID_pkcs7_digest:\n\tdefault:\n\t\tPKCS7err(PKCS7_F_PKCS7_SET_TYPE,PKCS7_R_UNSUPPORTED_CONTENT_TYPE);\n\t\tgoto err;\n\t\t}\n\treturn(1);\nerr:\n\treturn(0);\n\t}', 'ASN1_OBJECT *OBJ_nid2obj(int n)\n\t{\n\tADDED_OBJ ad,*adp;\n\tASN1_OBJECT ob;\n\tif ((n >= 0) && (n < NUM_NID))\n\t\t{\n\t\tif ((n != NID_undef) && (nid_objs[n].nid == NID_undef))\n\t\t\t{\n\t\t\tOBJerr(OBJ_F_OBJ_NID2OBJ,OBJ_R_UNKNOWN_NID);\n\t\t\treturn(NULL);\n\t\t\t}\n\t\treturn((ASN1_OBJECT *)&(nid_objs[n]));\n\t\t}\n\telse if (added == NULL)\n\t\treturn(NULL);\n\telse\n\t\t{\n\t\tad.type=ADDED_NID;\n\t\tad.obj= &ob;\n\t\tob.nid=n;\n\t\tadp=(ADDED_OBJ *)lh_retrieve(added,(char *)&ad);\n\t\tif (adp != NULL)\n\t\t\treturn(adp->obj);\n\t\telse\n\t\t\t{\n\t\t\tOBJerr(OBJ_F_OBJ_NID2OBJ,OBJ_R_UNKNOWN_NID);\n\t\t\treturn(NULL);\n\t\t\t}\n\t\t}\n\t}', 'void ERR_put_error(int lib, int func, int reason, const char *file,\n\t     int line)\n\t{\n\tERR_STATE *es;\n#ifdef _OSD_POSIX\n\tif (strncmp(file,"*POSIX(", sizeof("*POSIX(")-1) == 0) {\n\t\tchar *end;\n\t\tfile += sizeof("*POSIX(")-1;\n\t\tend = &file[strlen(file)-1];\n\t\tif (*end == \')\')\n\t\t\t*end = \'\\0\';\n\t\tif ((end = strrchr(file, \'/\')) != NULL)\n\t\t\tfile = &end[1];\n\t}\n#endif\n\tes=ERR_get_state();\n\tes->top=(es->top+1)%ERR_NUM_ERRORS;\n\tif (es->top == es->bottom)\n\t\tes->bottom=(es->bottom+1)%ERR_NUM_ERRORS;\n\tes->err_buffer[es->top]=ERR_PACK(lib,func,reason);\n\tes->err_file[es->top]=file;\n\tes->err_line[es->top]=line;\n\terr_clear_data(es,es->top);\n\t}', 'int BIO_free(BIO *a)\n\t{\n\tint ret=0,i;\n\tif (a == NULL) return(0);\n\ti=CRYPTO_add(&a->references,-1,CRYPTO_LOCK_BIO);\n#ifdef REF_PRINT\n\tREF_PRINT("BIO",a);\n#endif\n\tif (i > 0) return(1);\n#ifdef REF_CHECK\n\tif (i < 0)\n\t\t{\n\t\tfprintf(stderr,"BIO_free, bad reference count\\n");\n\t\tabort();\n\t\t}\n#endif\n\tif ((a->callback != NULL) &&\n\t\t((i=(int)a->callback(a,BIO_CB_FREE,NULL,0,0L,1L)) <= 0))\n\t\t\treturn(i);\n\tCRYPTO_free_ex_data(bio_meth,a,&a->ex_data);\n\tif ((a->method == NULL) || (a->method->destroy == NULL)) return(1);\n\tret=a->method->destroy(a);\n\tFree(a);\n\treturn(1);\n\t}', 'int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,\n\t     int line)\n\t{\n\tint ret;\n\tif (add_lock_callback != NULL)\n\t\t{\n#ifdef LOCK_DEBUG\n\t\tint before= *pointer;\n#endif\n\t\tret=add_lock_callback(pointer,amount,type,file,line);\n#ifdef LOCK_DEBUG\n\t\tfprintf(stderr,"ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\\n",\n\t\t\tCRYPTO_thread_id(),\n\t\t\tbefore,amount,ret,\n\t\t\tCRYPTO_get_lock_name(type),\n\t\t\tfile,line);\n#endif\n\t\t*pointer=ret;\n\t\t}\n\telse\n\t\t{\n\t\tCRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,file,line);\n\t\tret= *pointer+amount;\n#ifdef LOCK_DEBUG\n\t\tfprintf(stderr,"ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\\n",\n\t\t\tCRYPTO_thread_id(),\n\t\t\t*pointer,amount,ret,\n\t\t\tCRYPTO_get_lock_name(type),\n\t\t\tfile,line);\n#endif\n\t\t*pointer=ret;\n\t\tCRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,file,line);\n\t\t}\n\treturn(ret);\n\t}']