@@ -27,9 +27,11 @@ extern "C"
27
27
28
28
for (auto i = 0 ; i < internalSections.size (); i += 1 )
29
29
{
30
- sections[i].name =
31
- (char *)malloc (strlen (internalSections[i].name .c_str ()) + 1 );
32
- strcpy (sections[i].name , internalSections[i].name .c_str ());
30
+ auto nameLength = internalSections[i].name .size () + 1 ;
31
+ sections[i].name = (char *)malloc (nameLength + 1 );
32
+ strncpy (sections[i].name , internalSections[i].name .c_str (),
33
+ nameLength - 1 );
34
+ sections[i].name [nameLength - 1 ] = ' \0 ' ;
33
35
34
36
sections[i].lines = (KeyValuePairInternal *)malloc (
35
37
internalSections[i].lines .size () *
@@ -39,18 +41,23 @@ extern "C"
39
41
40
42
for (auto j = 0 ; j < internalSections[i].lines .size (); j += 1 )
41
43
{
42
- sections[i].lines [j].key = (char *)malloc (
43
- strlen (internalSections[i].lines [j].first .c_str ()) + 1 );
44
- strcpy (sections[i].lines [j].key ,
45
- internalSections[i].lines [j].first .c_str ());
44
+ auto keyLength = internalSections[i].lines [j].first .size () + 1 ;
45
+ sections[i].lines [j].key = (char *)malloc (keyLength);
46
+ strncpy (sections[i].lines [j].key ,
47
+ internalSections[i].lines [j].first .c_str (),
48
+ keyLength - 1 );
49
+ sections[i].lines [j].key [keyLength - 1 ] = ' \0 ' ;
46
50
47
51
auto values = internalSections[i].lines [j].second ;
48
52
49
53
for (auto k = 0 ; k < values.size (); k += 1 )
50
54
{
55
+ auto valueLength = values[k].size () + 1 ;
51
56
sections[i].lines [j].values [k] =
52
- (char *)malloc (strlen (values[k].c_str ()) + 1 );
53
- strcpy (sections[i].lines [j].values [k], values[k].c_str ());
57
+ (char *)malloc (valueLength);
58
+ strncpy (sections[i].lines [j].values [k], values[k].c_str (),
59
+ values[k].size ());
60
+ sections[i].lines [j].values [k][valueLength - 1 ] = ' \0 ' ;
54
61
}
55
62
56
63
sections[i].lines [j].valueCount = values.size ();
0 commit comments