1
1
/*
2
- * Copyright (c) 2019, 2022 , Oracle and/or its affiliates. All rights reserved.
2
+ * Copyright (c) 2019, 2023 , Oracle and/or its affiliates. All rights reserved.
3
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
4
*
5
5
* This code is free software; you can redistribute it and/or modify it
@@ -281,7 +281,13 @@ get_full_name(WCHAR* input)
281
281
continue ;
282
282
}
283
283
if (input[i] == L' @' ) {
284
- return _wcsdup (input);
284
+ size_t newlen = wcslen (input) + 1 ;
285
+ WCHAR* result = new WCHAR[newlen];
286
+ if (!result) {
287
+ return NULL ;
288
+ }
289
+ wcscpy_s (result, newlen, input);
290
+ return result;
285
291
}
286
292
}
287
293
@@ -539,7 +545,7 @@ gss_export_name(OM_uint32 *minor_status,
539
545
// We only deal with not-so-long names.
540
546
// 04 01 00 ** 06 ** OID len:int32 name
541
547
int mechLen = KRB5_OID.length ;
542
- char * buffer = new char [ 10 + mechLen + len] ;
548
+ char * buffer = ( char *) malloc ( 10 + mechLen + len) ;
543
549
if (buffer == NULL ) {
544
550
goto err;
545
551
}
@@ -555,7 +561,7 @@ gss_export_name(OM_uint32 *minor_status,
555
561
len = WideCharToMultiByte (CP_UTF8, 0 , fullname, len,
556
562
buffer+10 +mechLen, len, NULL , NULL );
557
563
if (len == 0 ) {
558
- delete[] buffer;
564
+ free ( buffer) ;
559
565
goto err;
560
566
}
561
567
exported_name->length = 10 + mechLen + len;
@@ -580,13 +586,13 @@ gss_display_name(OM_uint32 *minor_status,
580
586
581
587
SEC_WCHAR* names = input_name->name ;
582
588
int len = (int )wcslen (names);
583
- char * buffer = new char [ 4 *len+1 ] ;
589
+ char * buffer = ( char *) malloc ( 4 *len+1 ) ;
584
590
if (buffer == NULL ) {
585
591
return GSS_S_FAILURE;
586
592
}
587
593
len = WideCharToMultiByte (CP_UTF8, 0 , names, len, buffer, 4 *len, NULL , NULL );
588
594
if (len == 0 ) {
589
- delete[] buffer;
595
+ free ( buffer) ;
590
596
return GSS_S_FAILURE;
591
597
}
592
598
buffer[len] = 0 ;
@@ -802,6 +808,7 @@ gss_inquire_cred(OM_uint32 *minor_status,
802
808
}
803
809
SEC_WCHAR* names = new SEC_WCHAR[lstrlen (snames.sUserName ) + 1 ];
804
810
if (names == NULL ) {
811
+ FreeContextBuffer (snames.sUserName );
805
812
return GSS_S_FAILURE;
806
813
}
807
814
StringCchCopy (names, lstrlen (snames.sUserName ) + 1 , snames.sUserName );
@@ -990,7 +997,7 @@ gss_init_sec_context(OM_uint32 *minor_status,
990
997
output_token->length = outSecBuff.cbBuffer ;
991
998
if (outSecBuff.cbBuffer ) {
992
999
// No idea how user would free the data. Let's duplicate one.
993
- output_token->value = new char [ outSecBuff.cbBuffer ] ;
1000
+ output_token->value = malloc ( outSecBuff.cbBuffer ) ;
994
1001
if (!output_token->value ) {
995
1002
FreeContextBuffer (outSecBuff.pvBuffer );
996
1003
goto err;
@@ -1012,13 +1019,13 @@ gss_init_sec_context(OM_uint32 *minor_status,
1012
1019
return GSS_S_COMPLETE;
1013
1020
}
1014
1021
err:
1015
- if (newCred) {
1016
- delete newCred;
1017
- }
1018
1022
if (firstTime) {
1019
1023
OM_uint32 dummy;
1020
1024
gss_delete_sec_context (&dummy, context_handle, GSS_C_NO_BUFFER);
1021
1025
}
1026
+ if (newCred) {
1027
+ delete newCred;
1028
+ }
1022
1029
if (output_token->value ) {
1023
1030
gss_release_buffer (NULL , output_token);
1024
1031
}
@@ -1241,7 +1248,7 @@ gss_get_mic(OM_uint32 *minor_status,
1241
1248
1242
1249
secBuff[1 ].BufferType = SECBUFFER_TOKEN;
1243
1250
secBuff[1 ].cbBuffer = context_handle->SecPkgContextSizes .cbMaxSignature ;
1244
- secBuff[1 ].pvBuffer = msg_token->value = new char [ secBuff[1 ].cbBuffer ] ;
1251
+ secBuff[1 ].pvBuffer = msg_token->value = malloc ( secBuff[1 ].cbBuffer ) ;
1245
1252
1246
1253
if (!secBuff[1 ].pvBuffer ) {
1247
1254
goto err;
@@ -1260,7 +1267,7 @@ gss_get_mic(OM_uint32 *minor_status,
1260
1267
msg_token->length = 0 ;
1261
1268
msg_token->value = NULL ;
1262
1269
if (secBuff[1 ].pvBuffer ) {
1263
- delete[] secBuff[1 ].pvBuffer ;
1270
+ free ( secBuff[1 ].pvBuffer ) ;
1264
1271
}
1265
1272
return GSS_S_FAILURE;
1266
1273
}
@@ -1324,19 +1331,19 @@ gss_wrap(OM_uint32 *minor_status,
1324
1331
1325
1332
SECURITY_STATUS ss;
1326
1333
SecBufferDesc buffDesc;
1327
- SecBuffer secBuff[3 ];
1334
+ SecBuffer secBuff[3 ] = { 0 } ;
1328
1335
1329
1336
buffDesc.ulVersion = SECBUFFER_VERSION;
1330
1337
buffDesc.cBuffers = 3 ;
1331
1338
buffDesc.pBuffers = secBuff;
1332
1339
1333
1340
secBuff[0 ].BufferType = SECBUFFER_TOKEN;
1334
1341
secBuff[0 ].cbBuffer = context_handle->SecPkgContextSizes .cbSecurityTrailer ;
1335
- output_message_buffer-> value = secBuff[0 ].pvBuffer = malloc (
1342
+ secBuff[0 ].pvBuffer = malloc (
1336
1343
context_handle->SecPkgContextSizes .cbSecurityTrailer
1337
1344
+ input_message_buffer->length
1338
1345
+ context_handle->SecPkgContextSizes .cbBlockSize );;
1339
- if (!output_message_buffer-> value ) {
1346
+ if (!secBuff[ 0 ]. pvBuffer ) {
1340
1347
goto err;
1341
1348
}
1342
1349
@@ -1376,8 +1383,10 @@ gss_wrap(OM_uint32 *minor_status,
1376
1383
secBuff[2 ].pvBuffer ,
1377
1384
secBuff[2 ].cbBuffer );
1378
1385
1386
+ output_message_buffer->value = secBuff[0 ].pvBuffer ;
1379
1387
output_message_buffer->length = secBuff[0 ].cbBuffer + secBuff[1 ].cbBuffer
1380
1388
+ secBuff[2 ].cbBuffer ;
1389
+
1381
1390
free (secBuff[1 ].pvBuffer );
1382
1391
free (secBuff[2 ].pvBuffer );
1383
1392
@@ -1413,7 +1422,7 @@ gss_unwrap(OM_uint32 *minor_status,
1413
1422
1414
1423
SECURITY_STATUS ss;
1415
1424
SecBufferDesc buffDesc;
1416
- SecBuffer secBuff[2 ];
1425
+ SecBuffer secBuff[2 ] = { 0 } ;
1417
1426
ULONG ulQop = 0 ;
1418
1427
1419
1428
buffDesc.cBuffers = 2 ;
@@ -1445,7 +1454,7 @@ gss_unwrap(OM_uint32 *minor_status,
1445
1454
1446
1455
// Must allocate a new memory block so client can release it correctly
1447
1456
output_message_buffer->length = secBuff[1 ].cbBuffer ;
1448
- output_message_buffer->value = new char [ secBuff[1 ].cbBuffer ] ;
1457
+ output_message_buffer->value = malloc ( secBuff[1 ].cbBuffer ) ;
1449
1458
1450
1459
if (!output_message_buffer->value ) {
1451
1460
goto err;
@@ -1595,7 +1604,7 @@ gss_display_status(OM_uint32 *minor_status,
1595
1604
MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
1596
1605
msg, 256 , 0 );
1597
1606
if (len > 0 ) {
1598
- status_string->value = new char [ len + 20 ] ;
1607
+ status_string->value = malloc ( len + 20 ) ;
1599
1608
if (!status_string->value ) {
1600
1609
status_string = GSS_C_NO_BUFFER;
1601
1610
return GSS_S_FAILURE;
@@ -1604,7 +1613,7 @@ gss_display_status(OM_uint32 *minor_status,
1604
1613
(LPSTR)status_string->value , len + 19 ,
1605
1614
" (%lx) %ls" , status_value, msg);
1606
1615
} else {
1607
- status_string->value = new char [ 33 ] ;
1616
+ status_string->value = malloc ( 33 ) ;
1608
1617
if (!status_string->value ) {
1609
1618
status_string = GSS_C_NO_BUFFER;
1610
1619
return GSS_S_FAILURE;
@@ -1662,7 +1671,7 @@ gss_release_buffer(OM_uint32 *minor_status,
1662
1671
return GSS_S_COMPLETE;
1663
1672
}
1664
1673
if (buffer->value ) {
1665
- delete[] buffer->value ;
1674
+ free ( buffer->value ) ;
1666
1675
buffer->value = NULL ;
1667
1676
}
1668
1677
buffer->length = 0 ;
0 commit comments