Make server ignore media files with unknown filename extensions
authorPerttu Ahola <celeron55@gmail.com>
Fri, 30 Mar 2012 19:49:44 +0000 (22:49 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Fri, 30 Mar 2012 19:49:44 +0000 (22:49 +0300)
src/server.cpp

index e9b236cc428e21d3723497be627e5f4f9b51ccfd..08813f7fa41a83780a0ab57412090130074eb978 100644 (file)
@@ -3905,12 +3905,25 @@ void Server::fillMediaCache()
                        if(dirlist[j].dir) // Ignode dirs
                                continue;
                        std::string filename = dirlist[j].name;
-                       // if name contains illegal characters, ignore the file
+                       // If name contains illegal characters, ignore the file
                        if(!string_allowed(filename, TEXTURENAME_ALLOWED_CHARS)){
-                               errorstream<<"Server: ignoring illegal file name: \""
+                               infostream<<"Server: ignoring illegal file name: \""
                                                <<filename<<"\""<<std::endl;
                                continue;
                        }
+                       // If name is not in a supported format, ignore it
+                       const char *supported_ext[] = {
+                               ".png", ".jpg", ".bmp", ".tga",
+                               ".pcx", ".ppm", ".psd", ".wal", ".rgb",
+                               ".ogg",
+                               NULL
+                       };
+                       if(removeStringEnd(filename, supported_ext) == ""){
+                               infostream<<"Server: ignoring unsupported file extension: \""
+                                               <<filename<<"\""<<std::endl;
+                               continue;
+                       }
+                       // Ok, attempt to load the file and add to cache
                        std::string filepath = mediapath + DIR_DELIM + filename;
                        // Read data
                        std::ifstream fis(filepath.c_str(), std::ios_base::binary);