@@ -219,6 +219,22 @@ isprog(const char *prog)
219219 return true;
220220}
221221
222+ static void
223+ destroy_app (struct app * app )
224+ {
225+ g_free (app -> name );
226+ g_free (app -> name_localized );
227+ g_free (app -> generic_name );
228+ g_free (app -> generic_name_localized );
229+ g_free (app -> exec );
230+ g_free (app -> tryexec );
231+ g_free (app -> working_dir );
232+ g_free (app -> icon );
233+ g_free (app -> categories );
234+ g_free (app -> filename );
235+ g_free (app );
236+ }
237+
222238static struct app *
223239add_app (FILE * fp , char * filename )
224240{
@@ -254,6 +270,17 @@ add_app(FILE *fp, char *filename)
254270 }
255271 parse_line (line , app , & is_desktop_entry );
256272 }
273+
274+ /*
275+ * Bail out if the .desktop file does not contain a [Desktop Entry] or
276+ * Name= field.
277+ */
278+ if (!app -> name ) {
279+ fprintf (stderr , "warn: file '%s' contains no valid desktop entry\n" , filename );
280+ destroy_app (app );
281+ return NULL ;
282+ }
283+
257284 app -> filename = strdup (filename );
258285
259286 /* post-processing */
@@ -340,7 +367,7 @@ compare_app_name(const void *a, const void *b)
340367 bb_name = bb -> name_localized ? bb -> name_localized : bb -> name ;
341368 aa_name = g_utf8_casefold (aa_name , -1 );
342369 bb_name = g_utf8_casefold (bb_name , -1 );
343- int ret = strcmp (aa_name , bb_name );
370+ int ret = g_strcmp0 (aa_name , bb_name );
344371 g_free ((void * )aa_name );
345372 g_free ((void * )bb_name );
346373 return ret ;
@@ -405,17 +432,7 @@ desktop_entries_destroy(GList *apps)
405432 GList * iter ;
406433 for (iter = apps ; iter ; iter = iter -> next ) {
407434 struct app * app = (struct app * )iter -> data ;
408- g_free (app -> name );
409- g_free (app -> name_localized );
410- g_free (app -> generic_name );
411- g_free (app -> generic_name_localized );
412- g_free (app -> exec );
413- g_free (app -> tryexec );
414- g_free (app -> working_dir );
415- g_free (app -> icon );
416- g_free (app -> categories );
417- g_free (app -> filename );
418- g_free (app );
435+ destroy_app (app );
419436 }
420437 g_list_free (apps );
421438}
0 commit comments