diff -up libmms-0.3/src/mms.c~ libmms-0.3/src/mms.c
--- libmms-0.3/src/mms.c~	2007-08-23 16:10:37.000000000 +0200
+++ libmms-0.3/src/mms.c	2007-08-23 16:10:37.000000000 +0200
@@ -1847,9 +1847,13 @@ uint64_t mms_get_raw_time_length (mms_t 
 }
 
 uint32_t mms_get_length (mms_t *this) {
-  return this->file_len;
-  // use this rather?
-  //return this->asf_header_len + this->asf_num_packets*this->asf_packet_len;
+  /* we could / should return this->file_len here, but usually this->file_len
+     is longer then the calculation below, as usually an asf file contains an
+     asf index object after the data stream. However since we do not have a
+     (known) way to get to this index object through mms, we return the
+     calculated size below, as that accurately represents the size of the parts
+     of the file we can get to. */
+  return this->asf_header_len + this->asf_num_packets*this->asf_packet_len;
 }
 
 off_t mms_get_current_pos (mms_t *this) {
