]> git.donarmstrong.com Git - lilypond.git/blobdiff - python/midi.c
* python/midi.c (midi_parse_track): robustness: don't read past
[lilypond.git] / python / midi.c
index b5e2f5bf57b1b6a14ca920b124732091abd46b24..8ccbaf975857160f10bde37b2cfc2c56f3469a1e 100644 (file)
@@ -135,7 +135,8 @@ get_number (unsigned char ** str, unsigned char * end_str, int length)
   long sum = 0;
   int i = 0;
   
-  for (; i < length; i++)
+  for (; i < length &&
+        ((*str) + i < end_str); i++)
     sum = (sum << 8) + (unsigned char) (*str)[i];
 
   *str += length;
@@ -204,8 +205,8 @@ read_string (unsigned char **track, unsigned char *end)
 }
 
 typedef PyObject* (*Read_midi_event)
-     (unsigned char **track, unsigned char *end, 
-      unsigned char x);
+  (unsigned char **track, unsigned char *end, 
+   unsigned char x);
 
 
 static PyObject *
@@ -299,7 +300,8 @@ midi_parse_track (unsigned char **track, unsigned char *track_end)
 
   pytrack = PyList_New (0);
 
-  track_end = *track + track_len;
+  if (*track + track_len < track_end)
+    track_end = *track + track_len;
 
   {  
     PyObject *pytime = PyInt_FromLong (0L);
@@ -357,7 +359,6 @@ midi_parse (unsigned char **midi,unsigned  char *midi_end)
 
   /* Header */
   header_len = get_number (midi, *midi + 4, 4);
-
   
   if (header_len < 6)
     return midi_error (__FUNCTION__,  ": header too short");
@@ -400,7 +401,7 @@ pymidi_parse (PyObject *self, PyObject *args)
     return 0;
 
   if (memcmp (midi, "MThd", 4))
-      return midi_error (__FUNCTION__,  ": MThd expected");
+    return midi_error (__FUNCTION__,  ": MThd expected");
   
   midi += 4;