Hi,
This a new report by Coverity about IUP 3.27 Windows port.
Best regards,
Ranier Vilela
________________________________________
De: scan-ad...@coverity.com <scan-ad...@coverity.com>
Enviado: sábado, 25 de maio de 2019 03:02
Para: ranier_...@hotmail.com
Assunto: New Defects reported by Coverity Scan for IUP - Portable User Interface

Hi,

Please find the latest report on new defect(s) introduced to IUP - Portable 
User Interface found with Coverity Scan.

24 new defect(s) introduced to IUP - Portable User Interface found with 
Coverity Scan.
37 defect(s), reported by Coverity Scan earlier, were marked fixed in the 
recent build analyzed by Coverity Scan.

New defect(s) Reported-by: Coverity Scan
Showing 20 of 24 defect(s)


** CID 341021:  Parse warnings  (PARSE_ERROR)
/include/atlbase.h: 73 in ()


________________________________________________________________________________________________________
*** CID 341021:  Parse warnings  (PARSE_ERROR)
/include/atlbase.h: 73 in ()
67      #error ATL requires C++ compilation (use a .cpp suffix)
68     #endif
69     #ifndef ATL_NO_LEAN_AND_MEAN
70     #define ATL_NO_LEAN_AND_MEAN
71     #endif
72
>>>     CID 341021:  Parse warnings  (PARSE_ERROR)
>>>     cannot open source file "atldef.h"
73     #include <atldef.h>
74
75     #ifndef _WINSOCKAPI_
76     #include <winsock2.h>
77     #endif
78

** CID 341020:  Resource leaks  (RESOURCE_LEAK)
/src/iup_globalsdlg.c: 239 in iGlobalsUpdate()


________________________________________________________________________________________________________
*** CID 341020:  Resource leaks  (RESOURCE_LEAK)
/src/iup_globalsdlg.c: 239 in iGlobalsUpdate()
233         IupSetAttributeId(list1, "", j + 1, attribs[i].name);
234         IupSetIntId(list1, "_IUP_READONLY", j + 1, attribs[i].readonly);
235         j++;
236       }
237
238       total_count = iupGetFunctions(NULL, 0);
>>>     CID 341020:  Resource leaks  (RESOURCE_LEAK)
>>>     Overwriting "attr_names" in "attr_names = (signed char 
>>> **)malloc(total_count * 4U)" leaks the storage that "attr_names" points to.
239       attr_names = (char **)malloc(total_count * sizeof(char *));
240       attr_count = iupGetFunctions(attr_names, total_count);
241       for (i = 0; i < attr_count; i++)
242         IupSetAttributeId(list3, "", i + 1, attr_names[i]);
243
244       free(attr_names);

** CID 341019:  Error handling issues  (CHECKED_RETURN)
/src/win/iupwin_label.c: 301 in winLabelMsgProc()


________________________________________________________________________________________________________
*** CID 341019:  Error handling issues  (CHECKED_RETURN)
/src/win/iupwin_label.c: 301 in winLabelMsgProc()
295         }
296       case WM_XBUTTONUP:
297       case WM_LBUTTONUP:
298       case WM_MBUTTONUP:
299       case WM_RBUTTONUP:
300         {
>>>     CID 341019:  Error handling issues  (CHECKED_RETURN)
>>>     Calling "iupwinButtonUp" without checking return value (as is done 
>>> elsewhere 8 out of 10 times).
301           iupwinButtonUp(ih, msg, wp, lp);
302           break;
303         }
304       case WM_MOUSEMOVE:
305       {
306         if (iupwinMouseMove(ih, msg, wp, lp))

** CID 341018:  Resource leaks  (RESOURCE_LEAK)
/srcfiledlg/iupwin_newfiledlg.cpp: 852 in winNewFileDlgPopup(Ihandle_ *, int, 
int)()


________________________________________________________________________________________________________
*** CID 341018:  Resource leaks  (RESOURCE_LEAK)
/srcfiledlg/iupwin_newfiledlg.cpp: 852 in winNewFileDlgPopup(Ihandle_ *, int, 
int)()
846
847       if (opfd)
848         opfd->Release();
849       if (spfd)
850         spfd->Release();
851
>>>     CID 341018:  Resource leaks  (RESOURCE_LEAK)
>>>     Variable "directory" going out of scope leaks the storage it points to.
852       return IUP_NOERROR;
853     }
854
855     extern "C" {
856     /* the only exported function,
857        once called it will replace regular IupFileDlg */

** CID 341017:  Security best practices violations  (STRING_OVERFLOW)
/src/win/iupwin_image_wdl.c: 383 in iupwinWdlImageGetImage()


________________________________________________________________________________________________________
*** CID 341017:  Security best practices violations  (STRING_OVERFLOW)
/src/win/iupwin_image_wdl.c: 383 in iupwinWdlImageGetImage()
377       if (make_inactive)
378         strcat(cache_name, "_INACTIVE");
379
380       if (iupAttribGet(ih, "_IUP_BGCOLOR_DEPEND") && bgcolor)
381       {
382         strcat(cache_name, "(");
>>>     CID 341017:  Security best practices violations  (STRING_OVERFLOW)
>>>     You might overrun the 100-character fixed-size string "cache_name" by 
>>> copying "bgcolor" without checking the length.
383         strcat(cache_name, bgcolor);
384         strcat(cache_name, ")");
385         bg_concat = 1;
386       }
387
388       /* Check for an already created native image */

** CID 341016:  Null pointer dereferences  (FORWARD_NULL)


________________________________________________________________________________________________________
*** CID 341016:  Null pointer dereferences  (FORWARD_NULL)
/src/iup_layoutdlg.c: 1668 in iLayoutPropertiesIdTextChanged_CB()
1662         else
1663           IupSetAttribute(txt1, "VALUE", "NULL");
1664
1665         if (strstr(name, "COLOR") != NULL)
1666         {
1667           Ihandle* colorbut = IupGetDialogChild(id_text, "SETCOLORBUT");
>>>     CID 341016:  Null pointer dereferences  (FORWARD_NULL)
>>>     Passing null pointer "value" to "IupStoreAttribute", which dereferences 
>>> it.
1668           IupStoreAttribute(colorbut, "BGCOLOR", value);
1669         }
1670       }
1671       return IUP_DEFAULT;
1672     }
1673

** CID 341015:  Integer handling issues  (DIVIDE_BY_ZERO)


________________________________________________________________________________________________________
*** CID 341015:  Integer handling issues  (DIVIDE_BY_ZERO)
/src/iup_flatscrollbar.c: 1047 in iupFlatScrollBarSetChildrenCurrentSize()
1041           iFlatScrollBarCalcHandler(ih->currentheight, 0, ymax, dy, 
sb_size, posy, &pos1, &pos2);
1042           iupBaseSetCurrentSize(sb_vert, sb_size, pos2 - pos1 + 1, 
shrink);  /* sb_vert->currentheight == dy in pixels */
1043         }
1044
1045         if (!iupAttribGetBoolean(ih, "XHIDDEN"))
1046         {
>>>     CID 341015:  Integer handling issues  (DIVIDE_BY_ZERO)
>>>     In function call "iFlatScrollBarCalcHandler", division by expression 
>>> "xmax" which may be zero has undefined behavior.
1047           iFlatScrollBarCalcHandler(ih->currentwidth, 0, xmax, dx, 
sb_size, posx, &pos1, &pos2);
1048           iupBaseSetCurrentSize(sb_horiz, pos2 - pos1 + 1, sb_size, 
shrink);  /* sb_horiz->currentwidth == dx in pixels */
1049         }
1050       }
1051       else
1052       {

** CID 341014:  Error handling issues  (NEGATIVE_RETURNS)
/src/iup_flattabs.c: 175 in iFlatTabsUpdateScrollPos()


________________________________________________________________________________________________________
*** CID 341014:  Error handling issues  (NEGATIVE_RETURNS)
/src/iup_flattabs.c: 175 in iFlatTabsUpdateScrollPos()
169
170         if (tabType == ITABS_TOP || tabType == ITABS_BOTTOM)
171           extra_size = iFlatTabsGetExtraWidth(ih, extra_buttons, 
img_position, horiz_padding);
172         else
173           extra_size = iFlatTabsGetExtraHeight(ih, extra_buttons, 
img_position, horiz_padding);
174
>>>     CID 341014:  Error handling issues  (NEGATIVE_RETURNS)
>>>     "count" is passed to a parameter that cannot be negative.
175         visible_width = calloc(count, sizeof(int));
176
177         check_size = 0;
178         for (pos = scroll_pos, child = ih->firstchild; child && pos <= 
child_pos; child = child->brother, pos++)
179         {
180           int tabvisible = iupAttribGetBooleanId(ih, "TABVISIBLE", pos);

** CID 341013:  Resource leaks  (RESOURCE_LEAK)
/src/win/iupwin_draw.c: 91 in iupwinDrawThemeInit()


________________________________________________________________________________________________________
*** CID 341013:  Resource leaks  (RESOURCE_LEAK)
/src/win/iupwin_draw.c: 91 in iupwinDrawThemeInit()
85         {
86           winThemeOpenData = (_winThemeOpenData)GetProcAddress(hinstDll, 
"OpenThemeData");
87           winThemeCloseData = (_winThemeCloseData)GetProcAddress(hinstDll, 
"CloseThemeData");
88           winThemeDrawBackground = 
(_winThemeDrawBackground)GetProcAddress(hinstDll, "DrawThemeBackground");
89           winThemeGetColor = (_winThemeGetColor)GetProcAddress(hinstDll, 
"GetThemeColor");
90         }
>>>     CID 341013:  Resource leaks  (RESOURCE_LEAK)
>>>     Variable "hinstDll" going out of scope leaks the storage it points to.
91       }
92     }
93
94     static int winDrawGetThemeStateId(int itemState)
95     {
96       if (itemState & ODS_DISABLED)

** CID 341012:  Error handling issues  (CHECKED_RETURN)
/src/win/iupwin_button.c: 555 in winButtonMsgProc()


________________________________________________________________________________________________________
*** CID 341012:  Error handling issues  (CHECKED_RETURN)
/src/win/iupwin_button.c: 555 in winButtonMsgProc()
549       case WM_XBUTTONUP:
550       case WM_LBUTTONUP:
551       case WM_MBUTTONUP:
552       case WM_RBUTTONUP:
553         {
554           /* Process BUTTON_CB */
>>>     CID 341012:  Error handling issues  (CHECKED_RETURN)
>>>     Calling "iupwinButtonUp" without checking return value (as is done 
>>> elsewhere 8 out of 10 times).
555           iupwinButtonUp(ih, msg, wp, lp);
556
557           if (!iupObjectCheck(ih))
558           {
559             *result = 0;
560             return 1;

** CID 341011:  Security best practices violations  (STRING_OVERFLOW)
/srccd/iup_draw_cd.c: 100 in cdfont()


________________________________________________________________________________________________________
*** CID 341011:  Security best practices violations  (STRING_OVERFLOW)
/srccd/iup_draw_cd.c: 100 in cdfont()
94         is_strikeout = 1;
95
96       sprintf(font, "%s, %s%s%s%s%d", type_face, is_bold ? "Bold " : "", 
is_italic ? "Italic " : "", is_underline ? "Underline " : "", is_strikeout ? 
"Strikeout " : "", size);
97
98       /* store in native font and manually save font parameters */
99       strcpy(ctxcanvas->canvas->native_font, font);
>>>     CID 341011:  Security best practices violations  (STRING_OVERFLOW)
>>>     You might overrun the 1024-character fixed-size string 
>>> "ctxcanvas->canvas->font_type_face" by copying "type_face" without checking 
>>> the length.
100       strcpy(ctxcanvas->canvas->font_type_face, type_face);
101       ctxcanvas->canvas->font_style = style;
102       ctxcanvas->canvas->font_size = size;
103
104       return 0;
105     }

** CID 341010:  Possible Control flow issues  (DEADCODE)
/src/win/iupwin_label.c: 90 in winLabelDrawImage()


________________________________________________________________________________________________________
*** CID 341010:  Possible Control flow issues  (DEADCODE)
/src/win/iupwin_label.c: 90 in winLabelDrawImage()
84       x += xpad;
85       y += ypad;
86
87       iupwinDrawBitmap(hDC, hBitmap, x, y, width, height, width, height, 
bpp);
88
89       if (hMask)
>>>     CID 341010:  Possible Control flow issues  (DEADCODE)
>>>     Execution cannot reach this statement: "DeleteObject(hMask);".
90         DeleteObject(hMask);
91     }
92
93     static void winLabelDrawText(Ihandle* ih, HDC hDC, int rect_width, int 
rect_height, UINT itemState)
94     {
95       int xpad = ih->data->horiz_padding,

** CID 341009:    (FORWARD_NULL)


________________________________________________________________________________________________________
*** CID 341009:    (FORWARD_NULL)
/src/iup_globalsdlg.c: 314 in iGlobalsSet_CB()
308         else
309           IupSetStrGlobal(name, value);
310
311         if (strstr(name, "COLOR") != NULL)
312         {
313           Ihandle* colorbut = (Ihandle *)iupAttribGetInherit(list1, 
"_IUP_COLORBUTTON");
>>>     CID 341009:    (FORWARD_NULL)
>>>     Passing null pointer "value" to "IupStoreAttribute", which dereferences 
>>> it.
314           IupStoreAttribute(colorbut, "BGCOLOR", value);  /* set it even if 
it is NULL */
315           IupSetStrGlobal("BGCOLOR", value);
316         }
317       }
318       return IUP_DEFAULT;
319     }
/src/iup_globalsdlg.c: 315 in iGlobalsSet_CB()
309           IupSetStrGlobal(name, value);
310
311         if (strstr(name, "COLOR") != NULL)
312         {
313           Ihandle* colorbut = (Ihandle *)iupAttribGetInherit(list1, 
"_IUP_COLORBUTTON");
314           IupStoreAttribute(colorbut, "BGCOLOR", value);  /* set it even if 
it is NULL */
>>>     CID 341009:    (FORWARD_NULL)
>>>     Passing null pointer "value" to "IupSetStrGlobal", which dereferences 
>>> it.
315           IupSetStrGlobal("BGCOLOR", value);
316         }
317       }
318       return IUP_DEFAULT;
319     }
320

** CID 341008:  Null pointer dereferences  (FORWARD_NULL)


________________________________________________________________________________________________________
*** CID 341008:  Null pointer dereferences  (FORWARD_NULL)
/src/iup_split.c: 374 in iSplitSetColorAttrib()
368
369     static int iSplitSetColorAttrib(Ihandle* ih, const char* value)
370     {
371       if (value != NULL && ih->data->showgrip == 0)
372         IupSetAttribute(ih->firstchild, "STYLE", "FILL");
373
>>>     CID 341008:  Null pointer dereferences  (FORWARD_NULL)
>>>     Passing null pointer "value" to "IupSetStrAttribute", which 
>>> dereferences it.
374       IupSetStrAttribute(ih->firstchild, "COLOR", value);
375       return 0;
376     }
377
378     static char* iSplitGetColorAttrib(Ihandle* ih)
379     {

** CID 341007:    (STRING_OVERFLOW)
/src/iup_layoutdlg.c: 1648 in iLayoutPropertiesIdTextChanged_CB()
/src/iup_layoutdlg.c: 1652 in iLayoutPropertiesIdTextChanged_CB()


________________________________________________________________________________________________________
*** CID 341007:    (STRING_OVERFLOW)
/src/iup_layoutdlg.c: 1648 in iLayoutPropertiesIdTextChanged_CB()
1642         Ihandle* txt1 = IupGetDialogChild(id_text, "VALUE1A");
1643         Ihandle* list1 = (Ihandle*)iupAttribGetInherit(id_text, 
"_IUP_PROPLIST1");
1644         char* itemlist1 = IupGetAttribute(list1, "VALUE");
1645         if (!itemlist1)
1646           return IUP_DEFAULT;
1647
>>>     CID 341007:    (STRING_OVERFLOW)
>>>     You might overrun the 100-character fixed-size string "name" by copying 
>>> the return value of "IupGetAttribute" without checking the length.
1648         strcpy(name, IupGetAttribute(list1, itemlist1));
1649
1650         iupClassGetAttribNameInfo(elem->iclass, name, &def_value, &flags);
1651
1652         strcat(name, id);
1653
/src/iup_layoutdlg.c: 1652 in iLayoutPropertiesIdTextChanged_CB()
1646           return IUP_DEFAULT;
1647
1648         strcpy(name, IupGetAttribute(list1, itemlist1));
1649
1650         iupClassGetAttribNameInfo(elem->iclass, name, &def_value, &flags);
1651
>>>     CID 341007:    (STRING_OVERFLOW)
>>>     You might overrun the 100-character fixed-size string "name" by copying 
>>> "id" without checking the length.
1652         strcat(name, id);
1653
1654         value = IupGetAttribute(elem, name);
1655         if (value)
1656         {
1657           if (flags&IUPAF_NO_STRING)

** CID 341006:  Integer handling issues  (DIVIDE_BY_ZERO)


________________________________________________________________________________________________________
*** CID 341006:  Integer handling issues  (DIVIDE_BY_ZERO)
/src/iup_flatscrollbar.c: 1083 in iupFlatScrollBarSetChildrenPosition()
1077           iFlatScrollBarCalcHandler(ih->currentheight, 0, ymax, dy, 
sb_size, posy, &pos1, &pos2);
1078           iupBaseSetPosition(sb_vert, ih->currentwidth - sb_size, pos1);
1079         }
1080
1081         if (!iupAttribGetBoolean(ih, "XHIDDEN"))
1082         {
>>>     CID 341006:  Integer handling issues  (DIVIDE_BY_ZERO)
>>>     In function call "iFlatScrollBarCalcHandler", division by expression 
>>> "xmax" which may be zero has undefined behavior.
1083           iFlatScrollBarCalcHandler(ih->currentwidth, 0, xmax, dx, 
sb_size, posx, &pos1, &pos2);
1084           iupBaseSetPosition(sb_horiz, pos1, ih->currentheight - sb_size);
1085         }
1086       }
1087       else
1088       {

** CID 341005:  Null pointer dereferences  (FORWARD_NULL)
/srcfiledlg/iupwin_newfiledlg.cpp: 726 in winNewFileDlgPopup(Ihandle_ *, int, 
int)()


________________________________________________________________________________________________________
*** CID 341005:  Null pointer dereferences  (FORWARD_NULL)
/srcfiledlg/iupwin_newfiledlg.cpp: 726 in winNewFileDlgPopup(Ihandle_ *, int, 
int)()
720           }
721         }
722         else
723         {
724           IShellItemArray *psiaResult;
725
>>>     CID 341005:  Null pointer dereferences  (FORWARD_NULL)
>>>     Passing null pointer "opfd" to "GetResults", which dereferences it. 
>>> (The dereference happens because this is a virtual function call.)
726           hr = opfd->GetResults(&psiaResult);
727           if (SUCCEEDED(hr))
728           {
729             PWSTR pszFilePath = NULL;
730             DWORD dwNumItems = 0; // number of items in multiple selection
731

** CID 341004:    (REVERSE_INULL)
/srcfiledlg/iupwin_newfiledlg.cpp: 353 in winNewFileDlgCreateFilterSpecs(char 
*, int *)()
/srcfiledlg/iupwin_newfiledlg.cpp: 369 in winNewFileDlgCreateFilterSpecs(char 
*, int *)()


________________________________________________________________________________________________________
*** CID 341004:    (REVERSE_INULL)
/srcfiledlg/iupwin_newfiledlg.cpp: 353 in winNewFileDlgCreateFilterSpecs(char 
*, int *)()
347             filters[i].pszName = iupwinStrToSystem(name);
348             break;
349           }
350           filter++;
351         }
352
>>>     CID 341004:    (REVERSE_INULL)
>>>     Null-checking "filter" suggests that it may be null, but it has already 
>>> been dereferenced on all paths leading to the check.
353         if (!filter)
354           break;
355
356         name = ++filter;
357
358         while (*filter)
/srcfiledlg/iupwin_newfiledlg.cpp: 369 in winNewFileDlgCreateFilterSpecs(char 
*, int *)()
363             filters[i].pszSpec = iupwinStrToSystem(name);
364             break;
365           }
366           filter++;
367         }
368
>>>     CID 341004:    (REVERSE_INULL)
>>>     Null-checking "filter" suggests that it may be null, but it has already 
>>> been dereferenced on all paths leading to the check.
369         if (!filter)
370           break;
371
372         i++;
373         name = ++filter;
374

** CID 341003:  Resource leaks  (RESOURCE_LEAK)
/srcfiledlg/iupwin_newfiledlg.cpp: 803 in winNewFileDlgPopup(Ihandle_ *, int, 
int)()


________________________________________________________________________________________________________
*** CID 341003:  Resource leaks  (RESOURCE_LEAK)
/srcfiledlg/iupwin_newfiledlg.cpp: 803 in winNewFileDlgPopup(Ihandle_ *, int, 
int)()
797                       char nameid[100];
798                       char *fname = iupStrFileGetTitle(filename);
799                       sprintf(nameid, "MULTIVALUE%d", i + 1);
800                       iupAttribSetStrf(ih, nameid, "%s%s", dir, fname);
801
802                       iupAttribSetStrf(ih, "VALUE", "%s%s|", value, 
iupAttribGetId(ih, "MULTIVALUE", i + 1));
>>>     CID 341003:  Resource leaks  (RESOURCE_LEAK)
>>>     Variable "fname" going out of scope leaks the storage it points to.
803                     }
804                     else
805                     {
806                       iupAttribSetStrId(ih, "MULTIVALUE", i + 1, filename);
807
808                       if (i == 0)

** CID 341002:  Resource leaks  (RESOURCE_LEAK)
/src/win/iupwin_draw.c: 79 in iupwinDrawThemeInit()


________________________________________________________________________________________________________
*** CID 341002:  Resource leaks  (RESOURCE_LEAK)
/src/win/iupwin_draw.c: 79 in iupwinDrawThemeInit()
73     {
74       if (!winAlphaBlend)
75       {
76         HINSTANCE lib = LoadLibrary(TEXT("Msimg32"));
77         if (lib)
78           winAlphaBlend = (_winAlphaBlendFunc)GetProcAddress(lib, 
"AlphaBlend");
>>>     CID 341002:  Resource leaks  (RESOURCE_LEAK)
>>>     Variable "lib" going out of scope leaks the storage it points to.
79       }
80
81       if (!winThemeOpenData && iupwin_comctl32ver6)
82       {
83         HMODULE hinstDll = LoadLibrary(TEXT("uxtheme.dll"));
84         if (hinstDll)


________________________________________________________________________________________________________
To view the defects in Coverity Scan visit, 
https://u2389337.ct.sendgrid.net/wf/click?upn=08onrYu34A-2BWcWUl-2F-2BfV0V05UPxvVjWch-2Bd2MGckcRZfAtCqgPBMdgGkhuAKg1yT0Ih2yuJh1J0qt0b6HtTyCiyxkqLFT8-2FBVlV2qqhAorvdLendW6Nv8wPCNeam3biR_eiB7fn2qCcye0Rgfi8ocKxjvSeIjDfclXGEvRcfqXt-2BCX3Cww48-2FEc8Wbb-2FnXVVmkTsdM4Dn6Ar-2FuJLJ0JhPK-2Bu4VnglFRf1EbyjsZrsgwCsNvhfNHkAISfY3HGZslTaNHb0fEX7NpprvY66FMov7X1opwqGkl4-2Bvaeh9B6rIXUUWME4lGavqWQzlO5wY7vzIT93seGbm2dkMahgmfRWQSTwHGvJVCNV8GlodI6kme8-3D

  To manage Coverity Scan email notifications for "ranier_...@hotmail.com", 
click 
https://u2389337.ct.sendgrid.net/wf/click?upn=08onrYu34A-2BWcWUl-2F-2BfV0V05UPxvVjWch-2Bd2MGckcRbVDbis712qZDP-2FA8y06Nq4Q7HtAiL0B2JjzS9tGzNjj0xCKPpJpNlZfiSpXQdYQgl-2ByL0XrqtoUO-2FUmHQ4rCH9WlVuR5AJaY99S7Dxg8OoV09ZQj6UNeuZPDB50pIrfis-3D_eiB7fn2qCcye0Rgfi8ocKxjvSeIjDfclXGEvRcfqXt-2BCX3Cww48-2FEc8Wbb-2FnXVVm9gGIluPFb5kBa4e-2FVbZBc6QJMqAeeF8wys1ukeGYBjYi1i2VP-2BfpljwCkoL1p3jLNQwBtW8zqHCVLBb0lp88kjHm5i3-2BFmfgz9QI1RXExb-2F3jHu9uTcMlqmZLNDI7wvYrO4lKfzeL9eFeTQ-2BQrFNr3MPp1skWYfe5VLi8OpjbpU-3D



_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to