]> git.proxmox.com Git - libxdgmime-perl.git/blobdiff - src/xdgmimemagic.c
Squashed 'xdgmime-source/' changes from 28b70c4..3e7ee2d
[libxdgmime-perl.git] / src / xdgmimemagic.c
index fd49fa8e682de9c69571c626e59b3e4d35c5a2b3..98a1274c87f3abc1fb39acd45f0e95654a71df43 100644 (file)
@@ -6,23 +6,7 @@
  * Copyright (C) 2003  Red Hat, Inc.
  * Copyright (C) 2003  Jonathan Blandford <jrb@alum.mit.edu>
  *
- * Licensed under the Academic Free License version 2.0
- * Or under the following terms:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * SPDX-License-Identifier: LGPL-2.1-or-later or AFL-2.0
  */
 
 #ifdef HAVE_CONFIG_H
@@ -103,6 +87,8 @@ _xdg_mime_magic_matchlet_new (void)
   XdgMimeMagicMatchlet *matchlet;
 
   matchlet = malloc (sizeof (XdgMimeMagicMatchlet));
+  if (matchlet == NULL)
+    return NULL;
 
   matchlet->indent = 0;
   matchlet->offset = 0;
@@ -355,6 +341,11 @@ _xdg_mime_magic_parse_magic_line (FILE              *magic_file,
     return XDG_MIME_MAGIC_ERROR;
 
   matchlet = _xdg_mime_magic_matchlet_new ();
+
+  /* OOM */
+  if (matchlet == NULL)
+    return XDG_MIME_MAGIC_ERROR;
+
   matchlet->indent = indent;
   matchlet->offset = _xdg_mime_magic_read_a_number (magic_file, &end_of_file);
   if (end_of_file)
@@ -479,7 +470,9 @@ _xdg_mime_magic_parse_magic_line (FILE              *magic_file,
       /* We clean up the matchlet, byte swapping if needed */
       if (matchlet->word_size > 1)
        {
+#if LITTLE_ENDIAN
          unsigned int i;
+#endif
          if (matchlet->value_length % matchlet->word_size != 0)
            {
              _xdg_mime_magic_matchlet_free (matchlet);
@@ -767,6 +760,11 @@ _xdg_mime_magic_read_magic_file (XdgMimeMagic *mime_magic,
        {
        case XDG_MIME_MAGIC_SECTION:
          match = _xdg_mime_magic_match_new ();
+
+         /* OOM */
+         if (match == NULL)
+           return;
+
          state = _xdg_mime_magic_parse_header (magic_file, match);
          if (state == XDG_MIME_MAGIC_EOF || state == XDG_MIME_MAGIC_ERROR)
            _xdg_mime_magic_match_free (match);
@@ -784,6 +782,11 @@ _xdg_mime_magic_read_magic_file (XdgMimeMagic *mime_magic,
          break;
        case XDG_MIME_MAGIC_ERROR:
          state = _xdg_mime_magic_parse_error (magic_file);
+
+         /* After a parse error we can only be at EOF or reset to starting a
+          * new section. */
+         assert (state == XDG_MIME_MAGIC_EOF || state == XDG_MIME_MAGIC_SECTION);
+
          break;
        case XDG_MIME_MAGIC_EOF:
        default: