Skip to content

Commit e912fa9

Browse files
tests: fix linked list leak
Don't overwrite the original pointer returned by ec_find_adapters(), otherwise the linked list is leaked. Instead, save original pointer to the head of the list use and `adapters` as a temporary variable. Pass the original pointer to ec_free_adapters(). For win32, ec_free_adapters() was missing entirely.
1 parent 83c6264 commit e912fa9

7 files changed

Lines changed: 21 additions & 11 deletions

File tree

test/linux/eepromtool/eepromtool.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,7 @@ int main(int argc, char *argv[])
457457
else
458458
{
459459
ec_adaptert * adapter = NULL;
460+
ec_adaptert * head = NULL;
460461

461462
printf("Usage: eepromtool ifname slave OPTION fname|alias\n");
462463
printf("ifname = eth0 for example\n");
@@ -469,13 +470,13 @@ int main(int argc, char *argv[])
469470
printf(" -wi write EEPROM, input Intel Hex format\n");
470471

471472
printf ("\nAvailable adapters:\n");
472-
adapter = ec_find_adapters ();
473+
head = adapter = ec_find_adapters ();
473474
while (adapter != NULL)
474475
{
475476
printf (" - %s (%s)\n", adapter->name, adapter->desc);
476477
adapter = adapter->next;
477478
}
478-
ec_free_adapters(adapter);
479+
ec_free_adapters(head);
479480
}
480481

481482
printf("End program\n");

test/linux/simple_test/simple_test.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,16 +242,17 @@ int main(int argc, char *argv[])
242242
else
243243
{
244244
ec_adaptert * adapter = NULL;
245+
ec_adaptert * head = NULL;
245246
printf("Usage: simple_test ifname1\nifname = eth0 for example\n");
246247

247248
printf ("\nAvailable adapters:\n");
248-
adapter = ec_find_adapters ();
249+
head = adapter = ec_find_adapters ();
249250
while (adapter != NULL)
250251
{
251252
printf (" - %s (%s)\n", adapter->name, adapter->desc);
252253
adapter = adapter->next;
253254
}
254-
ec_free_adapters(adapter);
255+
ec_free_adapters(head);
255256
}
256257

257258
printf("End program\n");

test/linux/slaveinfo/slaveinfo.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,7 @@ char ifbuf[1024];
699699
int main(int argc, char *argv[])
700700
{
701701
ec_adaptert * adapter = NULL;
702+
ec_adaptert * head = NULL;
702703
printf("SOEM (Simple Open EtherCAT Master)\nSlaveinfo\n");
703704

704705
if (argc > 1)
@@ -714,13 +715,13 @@ int main(int argc, char *argv[])
714715
printf("Usage: slaveinfo ifname [options]\nifname = eth0 for example\nOptions :\n -sdo : print SDO info\n -map : print mapping\n");
715716

716717
printf ("Available adapters\n");
717-
adapter = ec_find_adapters ();
718+
head = adapter = ec_find_adapters ();
718719
while (adapter != NULL)
719720
{
720721
printf ("Description : %s, Device to use for wpcap: %s\n", adapter->desc,adapter->name);
721722
adapter = adapter->next;
722723
}
723-
ec_free_adapters(adapter);
724+
ec_free_adapters(head);
724725
}
725726

726727
printf("End program\n");

test/simple_ng/simple_ng.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,17 +287,18 @@ main(int argc, char *argv[])
287287

288288
if (argc != 2) {
289289
ec_adaptert * adapter = NULL;
290+
ec_adaptert * head = NULL;
290291
printf("Usage: simple_ng IFNAME1\n"
291292
"IFNAME1 is the NIC interface name, e.g. 'eth0'\n");
292293

293294
printf("\nAvailable adapters:\n");
294-
adapter = ec_find_adapters();
295+
head = adapter = ec_find_adapters();
295296
while (adapter != NULL)
296297
{
297298
printf(" - %s (%s)\n", adapter->name, adapter->desc);
298299
adapter = adapter->next;
299300
}
300-
ec_free_adapters(adapter);
301+
ec_free_adapters(head);
301302
return 1;
302303
}
303304

test/win32/eepromtool/eepromtool.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ void eepromtool(char *ifname, int slave, int mode, char *fname)
349349
int main(int argc, char *argv[])
350350
{
351351
ec_adaptert * adapter = NULL;
352+
ec_adaptert * head = NULL;
352353
printf("SOEM (Simple Open EtherCAT Master)\nEEPROM tool\n");
353354

354355
if (argc > 4)
@@ -374,12 +375,13 @@ int main(int argc, char *argv[])
374375
printf(" -wi write EEPROM, input Intel Hex format\n");
375376
/* Print the list */
376377
printf ("Available adapters\n");
377-
adapter = ec_find_adapters ();
378+
head = adapter = ec_find_adapters ();
378379
while (adapter != NULL)
379380
{
380381
printf ("Description : %s, Device to use for wpcap: %s\n", adapter->desc,adapter->name);
381382
adapter = adapter->next;
382383
}
384+
ec_free_adapters(adapter);
383385
}
384386

385387
printf("End program\n");

test/win32/simple_test/simple_test.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ char ifbuf[1024];
345345
int main(int argc, char *argv[])
346346
{
347347
ec_adaptert * adapter = NULL;
348+
ec_adaptert * head = NULL;
348349
printf("SOEM (Simple Open EtherCAT Master)\nSimple test\n");
349350

350351
if (argc > 1)
@@ -360,12 +361,13 @@ int main(int argc, char *argv[])
360361
printf("Usage: simple_test ifname1\n");
361362
/* Print the list */
362363
printf ("Available adapters\n");
363-
adapter = ec_find_adapters ();
364+
head = adapter = ec_find_adapters ();
364365
while (adapter != NULL)
365366
{
366367
printf ("Description : %s, Device to use for wpcap: %s\n", adapter->desc,adapter->name);
367368
adapter = adapter->next;
368369
}
370+
ec_free_adapters(adapter);
369371
}
370372

371373
printf("End program\n");

test/win32/slaveinfo/slaveinfo.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,7 @@ char ifbuf[1024];
618618
int main(int argc, char *argv[])
619619
{
620620
ec_adaptert * adapter = NULL;
621+
ec_adaptert * head = NULL;
621622
printf("SOEM (Simple Open EtherCAT Master)\nSlaveinfo\n");
622623

623624
if (argc > 1)
@@ -633,12 +634,13 @@ int main(int argc, char *argv[])
633634
printf("Usage: slaveinfo ifname [options]\nifname = eth0 for example\nOptions :\n -sdo : print SDO info\n -map : print mapping\n");
634635
/* Print the list */
635636
printf ("Available adapters\n");
636-
adapter = ec_find_adapters ();
637+
head = adapter = ec_find_adapters ();
637638
while (adapter != NULL)
638639
{
639640
printf ("Description : %s, Device to use for wpcap: %s\n", adapter->desc,adapter->name);
640641
adapter = adapter->next;
641642
}
643+
ec_free_adapters(head);
642644
}
643645

644646
printf("End program\n");

0 commit comments

Comments
 (0)