3 # User John Lindgren <john.lindgren@tds.net>
4 # Date 1295406442 18000
5 # Node ID b2c94059fb28375515c0ca9b54a5b2f09c333375
6 # Parent 3f1ab558c6cf557d226151e941b5113ccd154d73
7 mtp_up: Use strrchr instead of rindex; fix potential 0x1 pointer dereference (patch from Carlo Bramini, AUDPLUG-323).
9 diff -r 3f1ab558c6cf -r b2c94059fb28 src/mtp_up/filetype.c
10 --- a/src/mtp_up/filetype.c Tue Jan 18 01:19:25 2011 -0500
11 +++ b/src/mtp_up/filetype.c Tue Jan 18 22:07:22 2011 -0500
18 + const LIBMTP_filetype_t filetype;
21 +/* This need to be kept constantly updated as new file types arrive. */
22 +static const file_entry_t file_entries[] = {
23 + { "wav", LIBMTP_FILETYPE_WAV },
24 + { "mp3", LIBMTP_FILETYPE_MP3 },
25 + { "wma", LIBMTP_FILETYPE_WMA },
26 + { "ogg", LIBMTP_FILETYPE_OGG },
27 + { "mp4", LIBMTP_FILETYPE_MP4 },
28 + { "wmv", LIBMTP_FILETYPE_WMV },
29 + { "avi", LIBMTP_FILETYPE_AVI },
30 + { "mpeg", LIBMTP_FILETYPE_MPEG },
31 + { "mpg", LIBMTP_FILETYPE_MPEG },
32 + { "asf", LIBMTP_FILETYPE_ASF },
33 + { "qt", LIBMTP_FILETYPE_QT },
34 + { "mov", LIBMTP_FILETYPE_QT },
35 + { "wma", LIBMTP_FILETYPE_WMA },
36 + { "jpg", LIBMTP_FILETYPE_JPEG },
37 + { "jpeg", LIBMTP_FILETYPE_JPEG },
38 + { "jfif", LIBMTP_FILETYPE_JFIF },
39 + { "tif", LIBMTP_FILETYPE_TIFF },
40 + { "tiff", LIBMTP_FILETYPE_TIFF },
41 + { "bmp", LIBMTP_FILETYPE_BMP },
42 + { "gif", LIBMTP_FILETYPE_GIF },
43 + { "pic", LIBMTP_FILETYPE_PICT },
44 + { "pict", LIBMTP_FILETYPE_PICT },
45 + { "png", LIBMTP_FILETYPE_PNG },
46 + { "wmf", LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT },
47 + { "ics", LIBMTP_FILETYPE_VCALENDAR2 },
48 + { "exe", LIBMTP_FILETYPE_WINEXEC },
49 + { "com", LIBMTP_FILETYPE_WINEXEC },
50 + { "bat", LIBMTP_FILETYPE_WINEXEC },
51 + { "dll", LIBMTP_FILETYPE_WINEXEC },
52 + { "sys", LIBMTP_FILETYPE_WINEXEC },
53 + { "aac", LIBMTP_FILETYPE_AAC },
54 + { "mp2", LIBMTP_FILETYPE_MP2 },
55 + { "flac", LIBMTP_FILETYPE_FLAC },
56 + { "m4a", LIBMTP_FILETYPE_M4A },
57 + { "doc", LIBMTP_FILETYPE_DOC },
58 + { "xml", LIBMTP_FILETYPE_XML },
59 + { "xls", LIBMTP_FILETYPE_XLS },
60 + { "ppt", LIBMTP_FILETYPE_PPT },
61 + { "mht", LIBMTP_FILETYPE_MHT },
62 + { "jp2", LIBMTP_FILETYPE_JP2 },
63 + { "jpx", LIBMTP_FILETYPE_JPX }
66 /* Find the file type based on extension */
68 find_filetype (const char * filename)
71 - ptype = rindex(filename,'.')+1;
72 - LIBMTP_filetype_t filetype;
73 - /* This need to be kept constantly updated as new file types arrive. */
74 - if (!strcasecmp (ptype, "wav")) {
75 - filetype = LIBMTP_FILETYPE_WAV;
76 - } else if (!strcasecmp (ptype, "mp3")) {
77 - filetype = LIBMTP_FILETYPE_MP3;
78 - } else if (!strcasecmp (ptype, "wma")) {
79 - filetype = LIBMTP_FILETYPE_WMA;
80 - } else if (!strcasecmp (ptype, "ogg")) {
81 - filetype = LIBMTP_FILETYPE_OGG;
82 - } else if (!strcasecmp (ptype, "mp4")) {
83 - filetype = LIBMTP_FILETYPE_MP4;
84 - } else if (!strcasecmp (ptype, "wmv")) {
85 - filetype = LIBMTP_FILETYPE_WMV;
86 - } else if (!strcasecmp (ptype, "avi")) {
87 - filetype = LIBMTP_FILETYPE_AVI;
88 - } else if (!strcasecmp (ptype, "mpeg") || !strcasecmp (ptype, "mpg")) {
89 - filetype = LIBMTP_FILETYPE_MPEG;
90 - } else if (!strcasecmp (ptype, "asf")) {
91 - filetype = LIBMTP_FILETYPE_ASF;
92 - } else if (!strcasecmp (ptype, "qt") || !strcasecmp (ptype, "mov")) {
93 - filetype = LIBMTP_FILETYPE_QT;
94 - } else if (!strcasecmp (ptype, "wma")) {
95 - filetype = LIBMTP_FILETYPE_WMA;
96 - } else if (!strcasecmp (ptype, "jpg") || !strcasecmp (ptype, "jpeg")) {
97 - filetype = LIBMTP_FILETYPE_JPEG;
98 - } else if (!strcasecmp (ptype, "jfif")) {
99 - filetype = LIBMTP_FILETYPE_JFIF;
100 - } else if (!strcasecmp (ptype, "tif") || !strcasecmp (ptype, "tiff")) {
101 - filetype = LIBMTP_FILETYPE_TIFF;
102 - } else if (!strcasecmp (ptype, "bmp")) {
103 - filetype = LIBMTP_FILETYPE_BMP;
104 - } else if (!strcasecmp (ptype, "gif")) {
105 - filetype = LIBMTP_FILETYPE_GIF;
106 - } else if (!strcasecmp (ptype, "pic") || !strcasecmp (ptype, "pict")) {
107 - filetype = LIBMTP_FILETYPE_PICT;
108 - } else if (!strcasecmp (ptype, "png")) {
109 - filetype = LIBMTP_FILETYPE_PNG;
110 - } else if (!strcasecmp (ptype, "wmf")) {
111 - filetype = LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT;
112 - } else if (!strcasecmp (ptype, "ics")) {
113 - filetype = LIBMTP_FILETYPE_VCALENDAR2;
114 - } else if (!strcasecmp (ptype, "exe") || !strcasecmp (ptype, "com") ||
115 - !strcasecmp (ptype, "bat") || !strcasecmp (ptype, "dll") ||
116 - !strcasecmp (ptype, "sys")) {
117 - filetype = LIBMTP_FILETYPE_WINEXEC;
118 - } else if (!strcasecmp (ptype, "aac")) {
119 - filetype = LIBMTP_FILETYPE_AAC;
120 - } else if (!strcasecmp (ptype, "mp2")) {
121 - filetype = LIBMTP_FILETYPE_MP2;
122 - } else if (!strcasecmp (ptype, "flac")) {
123 - filetype = LIBMTP_FILETYPE_FLAC;
124 - } else if (!strcasecmp (ptype, "m4a")) {
125 - filetype = LIBMTP_FILETYPE_M4A;
126 - } else if (!strcasecmp (ptype, "doc")) {
127 - filetype = LIBMTP_FILETYPE_DOC;
128 - } else if (!strcasecmp (ptype, "xml")) {
129 - filetype = LIBMTP_FILETYPE_XML;
130 - } else if (!strcasecmp (ptype, "xls")) {
131 - filetype = LIBMTP_FILETYPE_XLS;
132 - } else if (!strcasecmp (ptype, "ppt")) {
133 - filetype = LIBMTP_FILETYPE_PPT;
134 - } else if (!strcasecmp (ptype, "mht")) {
135 - filetype = LIBMTP_FILETYPE_MHT;
136 - } else if (!strcasecmp (ptype, "jp2")) {
137 - filetype = LIBMTP_FILETYPE_JP2;
138 - } else if (!strcasecmp (ptype, "jpx")) {
139 - filetype = LIBMTP_FILETYPE_JPX;
141 - /* Tagging as unknown file type */
142 - filetype = LIBMTP_FILETYPE_UNKNOWN;
145 + char *ptype = strrchr(filename,'.');
150 + /* Skip '.' char */
153 + /* Seach entry in the table */
154 + for (n=0; n<sizeof(file_entries)/sizeof(file_entries[0]); n++)
156 + if (!strcasecmp (ptype, file_entries[n].ptype))
157 + return file_entries[n].filetype;
161 + return LIBMTP_FILETYPE_UNKNOWN;