![PVS-Studioããã³GIMP](https://habrastorage.org/getpro/habr/post_images/154/ac2/0a2/154ac20a216b5651b77a964d42d24544.png)
GIMPããã¹ãããã«ã¯ããŸãã³ã³ãã€ã«ããæ¹æ³ãåŠã¶å¿ èŠããããŸãã ããã¯ãæ€èšŒãæ°å延æããããããç°¡åãªäœæ¥ã§ã¯ãããŸããã ãã ãããã®ãããžã§ã¯ãã¯æåã§ããœãŒã¹ã³ãŒãã®å質ãè©äŸ¡ããããšã¯èå³æ·±ãã§ãã ãããã£ãŠãæ lazã¯ç Žããããããžã§ã¯ããåæãããŸããã
ã®ã³ã
æã ãã®ã°ã©ãã£ã«ã«ãšãã£ã¿ãŒã䜿çšããŸããã GIMPã€ã³ã¿ãŒãã§ã€ã¹ã¯å¥œãã§ã¯ãããŸããã æã«æ°åã次ã®èšäºã«ãŠãã³ãŒã³ã®åçãåãããããã ãã«Photoshopãè³Œå ¥ããã®ã¯æå³ããããŸããã ãã€ã³ããšGIMPã§ååã§ãã
ç§ã¯ãå©äŸ¿æ§ãå€æããã®ã«ååãªãããŠãŒã¶ãŒã§ã¯ãªããšèšããŸãã ããããçªãåºãŠããããã«æ€ åã«åº§ãã®ã¯äžå¿«ã ãšäž»åŒµããããã«ã倧工ãå®¶å ·ã®å°é家ã§ããå¿ èŠã¯ãŸã£ãããããŸããã GIMPã«ã¯ãæ°ã«ãªãå€ãã®æ¬ é¥ããªã¹ããããŠããŸãã ããšãã°ããã¡ã€ã«ãéããšãã«ããã·ã¢èªã®æåããã¹ã«å«ãŸããŠããå Žåã[å Žæ]ãã£ãŒã«ãã«ãã¡ã€ã«ãžã®ãã«ãã¹ãæ¿å ¥ã§ããŸããã ãã®ãããªå€ãã®æ¬ ç¹ããããŸãã
äžåšçšãªGIMPã€ã³ã¿ãŒãã§ãŒã¹ã«ç²ŸéããŠããã®ã§ãã³ãŒãã«å€ãã®ééããããããšãæåŸ ããŠããŸããã ç§ã¯ééã£ãŠããŸããã éçºè ã¯ãã§ã«ä»äºã§éç解æã䜿çšããŠããããšãããããŸãã ããã«ã圌ãã¯éç ²ã䜿çšããŸãã æã匷åãªéçã¢ãã©ã€ã¶ãŒã®1ã€ã§ããCoverityã䜿çšããŸãã
Coverityã䜿çšãããŠãããšããäºå®ã¯ãã€ã³ã¿ãŒããããžã®åç §ã«ãã£ãŠå€æããŸãã
ç±³åœæ¿åºã®æ¯æŽãåããŠçµç¹ããããªãŒãã³ãœãŒã¹ããã°ã©ã ã®ãšã©ãŒã®èª¿æ»ã«åãçµãã Coverityãããžã§ã¯ãã¯ããã§ãã¯ããããããžã§ã¯ãã®ãªã¹ãã«ã¯ã人æ°ã®ããScribusãGIMPãInkscapeãKritaãBlenderãªã©ãã°ã©ãã£ãã¯ã¹ãæäœããããã®çŽ100ã®ã¢ããªã±ãŒã·ã§ã³ãå«ãŸãããšå ±åããŠããŸãïŒ2007幎ã®åºçç©ããïŒã
æ€èšŒçµæ
Coverityã®åŸã«GIMPã³ãŒãã§äœãèŠã€ãããèŠãŠã¿ãŸãããã åæã¯ã PVS-StudioããŒãžã§ã³5.18ã䜿çšããŠå®è¡ãããŸããã
ãã©ã°ã¡ã³ãN1-N3
typedef double gdouble; GimpBlob * gimp_blob_square (gdouble xc, gdouble yc, gdouble xp, gdouble yp, gdouble xq, gdouble yq) { GimpBlobPoint points[4]; /* Make sure we order points ccw */ if (xp * yq - yq * xp < 0) { xq = -xq; yq = -yq; } .... }
PVS-StudioèŠåïŒV501 '-'æŒç®åã®å·Šå³ã«åãå¯æ¬¡åŒããããŸãïŒxp * yq-yq * xp gimpink-blob.c 162
ãxp * yq-yq * xpããšããè¡šçŸã¯éåžžã«å¥åŠã§ãã å€ãxp * yqãã¯ãããèªäœããæžç®ãããŸãã
åäžã®ãã§ãã¯ã¯ããã®ãã¡ã€ã«ã®å°ãäžã«ãããŸãã è¡ïŒ195ããã³278ã
ãã©ã°ã¡ã³ãN4
gint64 gimp_g_value_get_memsize (GValue *value) { .... GimpArray *array = g_value_get_boxed (value); if (array) memsize += (sizeof (GimpArray) + array->static_data ? 0 : array->length); .... }
èŠåPVS-StudioïŒV502ãïŒïŒãæŒç®åã¯ãäºæ³ãšã¯ç°ãªãæ¹æ³ã§åäœããå¯èœæ§ããããŸãã ãïŒïŒãæŒç®åã¯ãã+ãæŒç®åãããåªå 床ãäœããªããŸãã gimp-utils.c 233
ãªãã¬ãŒã¿ãŒã®åªå é äœã«é¢ããæ··ä¹±ã ç¹å®ã®ãªããžã§ã¯ãã®ãµã€ãºã«ã0ãŸãã¯ãarray-> lengthããè¿œå ããå¿ èŠããããŸãã ãã ããã+ãæŒç®åã®åªå é äœã¯ãïŒïŒãæŒç®åãããé«ããªã£ãŠããŸãã åŒã¯æ¬¡ã®ããã«æ©èœããŸãã
memsize += ((sizeof (GimpArray) + array->static_data) ? 0 : array->length);
ããããããã°ã©ããŒã¯ãããç¥ã£ãŠããã®ã§ãæ¬åŒ§ã䜿çšããŸããã ãããããã®åŸããã©ã±ããã¯é©åã§ã¯ãããŸããã æ£ãããªãã·ã§ã³ïŒ
memsize += sizeof (GimpArray) + (array->static_data ? 0 : array->length);
ãã©ã°ã¡ã³ãN5ãN6
#define cmsFLAGS_NOOPTIMIZE 0x0100 #define cmsFLAGS_BLACKPOINTCOMPENSATION 0x2000 static void lcms_layers_transform_rgb (...., gboolean bpc) { .... transform = cmsCreateTransform ( src_profile, lcms_format, dest_profile, lcms_format, intent, cmsFLAGS_NOOPTIMIZE | bpc ? cmsFLAGS_BLACKPOINTCOMPENSATION : 0); .... }
èŠåPVS-StudioïŒV502ãïŒïŒãæŒç®åã¯ãäºæ³ãšã¯ç°ãªãæ¹æ³ã§åäœããå¯èœæ§ããããŸãã ãïŒïŒãæŒç®åã®åªå é äœã¯ã|ããããäœã æŒç®åã lcms.c 1016
å€æ°ãbpcãã«å¿ããŠããã©ã°ãcmsFLAGS_BLACKPOINTCOMPENSATIONããŸãã¯ãã©ã°ãcmsFLAGS_BLACKPOINTCOMPENSATION | cmsFLAGS_NOOPTIMIZE "ã
æŒç®åã®åªå 床ã|ã äžé æŒç®åãïŒïŒãã®åªå 床ãããé«ãã ãã®çµæãã?:ãæŒç®åã®æ¡ä»¶ã¯åŒãcmsFLAGS_NOOPTIMIZE | bpcãã ãã®æ¡ä»¶ã¯åžžã«çã§ãã cmsFLAGS_BLACKPOINTCOMPENSATIONãã©ã°ã¯åžžã«é¢æ°ã«æž¡ãããŸãã
æ£ãããªãã·ã§ã³ïŒ
transform = cmsCreateTransform ( src_profile, lcms_format, dest_profile, lcms_format, intent, cmsFLAGS_NOOPTIMIZE | (bpc ? cmsFLAGS_BLACKPOINTCOMPENSATION : 0));
åæ§ã®ãšã©ãŒã¯ãlcms.c 1016ã«ãããŸãã
ãã©ã°ã¡ã³ãN7
static gint load_resource_lrfx (....) { .... else if (memcmp (effectname, "oglw", 4) == 0) <<<=== .... else if (memcmp (effectname, "iglw", 4) == 0) .... else if (memcmp (effectname, "oglw", 4) == 0) <<<=== .... else if (memcmp (effectname, "bevl", 4) == 0) .... }
PVS-StudioèŠåïŒV517ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ602ã688ãpsd-layer-res-load.c 602
ã·ãŒã±ã³ã¹if-elseif-elseif-ã®2ã€ã®åäžæ¡ä»¶...
ãã©ã°ã¡ã³ãN8
void gimp_text_get_transformation (GimpText *text, GimpMatrix3 *matrix) { g_return_if_fail (GIMP_IS_TEXT (text)); g_return_if_fail (matrix != NULL); matrix->coeff[0][0] = text->transformation.coeff[0][0]; matrix->coeff[0][1] = text->transformation.coeff[0][1]; matrix->coeff[0][2] = text->offset_x; matrix->coeff[1][0] = text->transformation.coeff[1][0]; matrix->coeff[1][1] = text->transformation.coeff[1][1]; matrix->coeff[1][2] = text->offset_y; matrix->coeff[2][0] = 0.0; matrix->coeff[2][1] = 0.0; matrix->coeff[2][1] = 1.0; <<<=== }
PVS-Studioã®èŠåïŒV519 'matrix-> coeff [2] [1]'å€æ°ã«ã¯å€ã2åé£ç¶ããŠå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ567ã568ãgimptext.c 568
æåŸã®è¡ã®å¹æ ã æåŸã«ãééã£ãã€ã³ããã¯ã¹ã䜿çšãããŸãã ããå¿ èŠããããŸãïŒ
matrix->coeff[2][0] = 0.0; matrix->coeff[2][1] = 0.0; matrix->coeff[2][2] = 1.0;
ãã©ã°ã¡ã³ãN9
static void warp_one (....) { .... if (first_time) gimp_pixel_rgn_init (&dest_rgn, new, x1, y1, (x2 - x1), (y2 - y1), TRUE, TRUE); else gimp_pixel_rgn_init (&dest_rgn, new, x1, y1, (x2 - x1), (y2 - y1), TRUE, TRUE); .... }
PVS-StudioèŠåïŒV523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã warp.c 1366
æ¡ä»¶ã«é¢ä¿ãªãåãã¢ã¯ã·ã§ã³ãå®è¡ãããããšã¯çãããã§ãã
ãã©ã°ã¡ã³ãN10ãN11ãNââ12
gboolean gimp_wire_read (GIOChannel *channel, guint8 *buf, gsize count, gpointer user_data) { g_return_val_if_fail (count >= 0, FALSE); .... }
PVS-StudioèŠåïŒV547åŒ 'count> = 0'ã¯åžžã«trueã§ãã 笊å·ãªãã®åã®å€ã¯åžžã«> = 0ã§ããgimpwire.c 99
ãcount> = 0ãããã§ãã¯ããŠãæå³ããããŸãããå€æ°ãcountãã¯ç¬Šå·ãªãã ããã§ãã ããã¯é倧ãªééãã§ã¯ãªããããããŸããããèšåãã䟡å€ããããŸãã
åæ§ã®ãã§ãã¯ïŒgimpwire.c 170; gimpcageconfig.c 428ã
V547蚺æã䜿çšããŠèŠã€ãã£ãããèå³æ·±ãã±ãŒã¹ã«ã€ããŠã¯ã以äžã§èª¬æããŸãã
ãã©ã°ã¡ã³ãN13
static GimpPlugInImageType image_types_parse (const gchar *name, const gchar *image_types) { .... while (*image_types && ((*image_types != ' ') || (*image_types != '\t') || (*image_types != ','))) { image_types++; } .... }
èŠåïŒV547åŒã¯åžžã«çã§ãã ããã§ã¯ãããããã&&ãæŒç®åã䜿çšããå¿ èŠããããŸãã gimppluginprocedure.c 808
æ確ã«ããããã人çºçãªäŸã説æããŸãã
int A = ...; if ( A != 1 || A != 2 || A != 3)
å€æ°Aãäœã§ãããæ¡ä»¶ã¯åžžã«æºããããŸãã
ãã©ã°ã¡ã³ãN14
static gunichar basic_inchar(port *pt) { .... gunichar c; .... c = g_utf8_get_char_validated(pt->rep.string.curr, len); if (c >= 0) /* Valid UTF-8 character? */ { len = g_unichar_to_utf8(c, NULL); pt->rep.string.curr += len; return c; } /* Look for next valid UTF-8 character in buffer */ pt->rep.string.curr = g_utf8_find_next_char( pt->rep.string.curr, pt->rep.string.past_the_end); .... }
PVS-StudioèŠåïŒV547åŒ 'c> = 0'ã¯åžžã«trueã§ãã 笊å·ãªãã®åã®å€ã¯åžžã«> = 0ã§ããscheme.c 1654
ãã¹ãŠã®æåã¯æå¹ãªUTF-8æåãšèŠãªãããŸãã å€æ° 'cââ'ã«ã¯ç¬Šå·ãªãã®åããããŸãã ãããã£ãŠãæ¡ä»¶ïŒc> = 0ïŒã¯åžžã«çã§ãã
ãã©ã°ã¡ã³ãN15
#define ABS(a) (((a) < 0) ? -(a) : (a)) static gint32 load_thumbnail (...., gint32 thumb_size, ....) { .... guint32 size; guint32 diff; .... diff = ABS(thumb_size - size); .... }
PVS-StudioèŠåïŒV547åŒ 'ïŒthumb_size-sizeïŒ<0'ã¯åžžã«falseã§ãã 笊å·ãªãã®åã®å€ã<0ã«ãªãããšã¯ãããŸããfile-xmc.c 874
ããã°ã©ã ã¯ãããã°ã©ããæå³ãããšããã«æ©èœããŸããã å€æ° 'thumb_size'ã10ã§ãå€æ° 'size'ã25ã§ãããšããŸãã
äžèŠãèšç®ã®çµæã¯15ã«ãªãããã§ããå®éãçµæã¯0xFFFFFFF1ïŒ4294967281ïŒã«ãªããŸãã
åŒãthumb_size-sizeãã«ã¯ç¬Šå·ãªãã®åããããŸãã ãã®çµæãæ°å0xFFFFFFF1uãååŸããŸãã ãã®å ŽåãABSãã¯ãã¯äœãããŸããã
ãã©ã°ã¡ã³ãN16
static gchar * script_fu_menu_map (const gchar *menu_path) { .... const gchar *suffix = menu_path + strlen (mapping[i].old); if (! *suffix == '/') continue; .... }
PVS-StudioèŠåïŒV562 0ãŸãã¯1ãå€47ãšæ¯èŒããã®ã¯å¥åŠã§ã!! *ãµãã£ãã¯ã¹== '/'ã script-fu-scripts.c 859
ç¹°ãè¿ããŸãããæäœã®åªå é äœã æåã«ãåŒãïŒ*ãµãã£ãã¯ã¹ããè©äŸ¡ãããŸãã ãã®çµæã0ãŸãã¯1ãåŸãããŸãããã®0ãŸãã¯1㯠'/'æåãšæ¯èŒãããŸãããããã¯æå³ããããŸããã
æ£ãããªãã·ã§ã³ïŒ
if (*suffix != '/')
ãã©ã°ã¡ã³ãN17
static void save_file_chooser_response (GtkFileChooser *chooser, gint response_id, GFigObj *obj) { .... gfig_context->current_obj = obj; gfig_save_callbk (); gfig_context->current_obj = gfig_context->current_obj; .... }
PVS-Studioã®èŠåïŒV570 'gfig_context-> current_obj'å€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã gfig-dialog.c 1623
å€æ°ã¯èªåèªèº«ã«ã³ããŒãããŸãã
ãã©ã°ã¡ã³ãN18
size g_strlcpy(gchar *dest, const gchar *src, gsize dest_size); GList * gimp_brush_generated_load (....) { .... gchar *string; .... /* the empty string is not an allowed name */ if (strlen (string) < 1) g_strlcpy (string, _("Untitled"), sizeof (string)); .... }
èŠåPVS_StudioïŒV579 g_strlcpyé¢æ°ã¯ããã€ã³ã¿ãŒãšãã®ãµã€ãºãåŒæ°ãšããŠåãåããŸãã ééããããããŸããã 3çªç®ã®åŒæ°ã調ã¹ãŸãã gimpbrushgenerated-load.c 119
sizeofïŒæååïŒæŒç®åã¯ããããã¡ãŒã®ãµã€ãºã§ã¯ãªãããã€ã³ã¿ãŒã®ãµã€ãºãèšç®ããŸãã
ãã©ã°ã¡ã³ãN19
static gboolean save_image (....) { .... gint c; .... if (has_alpha && (data[rowoffset + k + 1] < 128)) c |= 0 << (thisbit ++); else .... }
PVS-StudioèŠåïŒV684å€æ°ãcãã®å€ã¯å€æŽãããŸããã åŒã調ã¹ãããšãæ€èšããŠãã ããã ã0ãã§ã¯ãªãã1ããååšããå¯èœæ§ããããŸãã file-xbm.c 1136
åŒ "c | = 0 <<ïŒthisbit ++ïŒ;"ã¯ãå€æ° 'cââ'ã®å€ãå€æŽããŸããã
ç§ã®èŠ³å¯ã§ã¯ããã®ãããªã³ãŒãã¯ç¹å®ã®ãããããªã»ãããããã£ãããééã£ãŠãããšãã«èŠã€ããããšãã§ããŸãã ãã®å Žåãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
c &= ~(1u << (thisbit ++));
ãã©ã°ã¡ã³ãN20
gboolean gimp_item_get_popup_size (...., gint *popup_width, gint *popup_height) { .... if (scaling_up) { *popup_width = gimp_item_get_width (item); *popup_width = gimp_item_get_height (item); } .... }
PVS-StudioèŠåïŒV537ãpopup_widthãã¢ã€ãã ã®äœ¿çšã®æ£ç¢ºãã確èªããããšãæ€èšããŠãã ããã gimpitem-preview.c 126
å ¥åãã¹ãŸãã¯çµæã®ã³ããŒããŒã¹ãã æ£ãããªãã·ã§ã³ïŒ
*popup_width = gimp_item_get_width (item); *popup_height = gimp_item_get_height (item);
ãã©ã°ã¡ã³ãN21
gboolean gimp_draw_tool_on_vectors_curve (...., GimpAnchor **ret_segment_start, GimpAnchor **ret_segment_end, ....) { .... if (ret_segment_start) *ret_segment_start = NULL; if (ret_segment_start) *ret_segment_end = NULL; .... }
PVS-StudioèŠåïŒV581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã ãã§ãã¯è¡ïŒ1212ã1213ãgimpdrawtool.c 1213
å ¥åãã¹ãŸãã¯çµæã®ã³ããŒããŒã¹ãã æ£ãããªãã·ã§ã³ïŒ
if (ret_segment_start) *ret_segment_start = NULL; if (ret_segment_end) *ret_segment_end = NULL;
ãã©ã°ã¡ã³ãN22-N40
ObjectList_t* object_list_append_list(ObjectList_t *des, ObjectList_t *src) { GList *p; for (p = src->list; p; p = p->next) object_list_append(des, object_clone((Object_t*) p->data)); object_list_set_changed(des, (src) ? TRUE : FALSE); return des; }
PVS-StudioèŠåïŒV595 nullsrcã«å¯ŸããŠæ€èšŒãããåã«ããsrcããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ536ã538ãimap_object.c 536
ãïŒsrcïŒïŒTRUEïŒFALSEããšããæ¡ä»¶ããããã€ã³ã¿ãsrcãã¯nullptrãšçãããªããšçµè«ä»ããããšãã§ããŸãã
ãã ãããã®ãã€ã³ã¿ãŒã¯åŒãp = src-> listãã§å€§èã«éåç §ãããŠããŸãããããã¯ãšã©ãŒã§ãã
èŠåV595ãçºè¡ãããå Žæã¯ä»ã«ããããŸãã ãããã®å Žæã確èªããå¿ èŠããããŸãã
- ãlããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ262ã265ãgimpimage-item-list.c 262
- ãquantobjããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ965ã971ãgimpimage-convert-type.c 965
- ãslistããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ683ã685ãgimpfont.c 683
- ãdock_window-> p-> contextããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ487ã504ãgimpdockwindow.c 487
- ãlayer_rendererããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ1245ã1275ãgimplayertreeview.c 1245
- ãshell-> displayããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ574ã588ãgimpdisplayshell-dnd.c 574
- ãopsããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ265ã267ãgimpgegltool.c 265
- ããã€ã¢ãã°ããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ234ã249ãfile-save-dialog.c 234
- ãã·ã§ã«ããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ738ã763ãview-actions.c 738
- ãfnameããã€ã³ã¿ãŒã ãã§ãã¯ã©ã€ã³ïŒ1426ã1437ãscheme.c 1426
- 'sgip-> table'ãã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ148ã161ãsgi-lib.c 148
- 'sgip-> length'ãã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ154ã167ãsgi-lib.c 154
- ããã¯ã»ã«ããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ1482ã1508ãpsd-load.c 1482
- ãimg_a-> alpha_namesããã€ã³ã¿ãŒã è¡ã確èªããŠãã ããïŒ1735ã1741ãpsd-load.c 1735
- ããã©ã·ããã€ã³ã¿ãŒã è¡ã確èªïŒ432ã451ãbrush.c 432
- 'curve_list-> data'ãã€ã³ã¿ãŒã ãã§ãã¯ã©ã€ã³ïŒ126ã129ãcurve.c 126
- 'outline_list-> data'ãã€ã³ã¿ãŒã è¡ã確èªïŒ183ã187ãpxl-outline.c 183
- ãid_ptrããã€ã³ã¿ãŒã è¡ã確èªïŒ896ã898ãsample-colorize.c 896
ãããã«
èŠã€ãã£ããšã©ãŒã®é倧床ãå€æããããšã¯å°é£ã§ãã èšäºã®ãããã§äœããä¿®æ£ããããå¬ããã§ãã
ç§ãèšã£ãããã«ãGIMPã€ã³ã¿ãŒãã§ãŒã¹ã¯å¥œãã§ã¯ãããŸããããéçºè ã®äœæ¥ã«éåžžã«æè¬ããŠããŸãã GIMPã®èšäºã®åçãããããäœããŸããã ããããšã
ãã®èšäºã¯è±èªã§ãã
ãã®èšäºãè±èªåã®èŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒAndrey Karpovã PVS-Studioã§GIMPã®ãœãŒã¹ã³ãŒãã確èªããŸãã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§ãããã«å¯ŸããåçãåéããŸããïŒ PVS-Studioããã³CppCatããŒãžã§ã³2014ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã