02_datadir.patch 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. --- pinball-0.3.1.orig/base/Config.cpp
  2. +++ pinball-0.3.1/base/Config.cpp
  3. @@ -358,13 +358,6 @@
  4. }
  5. EM_COUT("Using " << m_iBpp << " bpp", 1);
  6. REMOVEARG(a, argc, argv);
  7. - } else if (strcmp(argv[a], "-data") == 0) {
  8. - if (argc > a) {
  9. - EM_COUT("Using datapath: " << argv[a+1], 1);
  10. - this->setDataDir(argv[a+1]);
  11. - REMOVEARG(a, argc, argv);
  12. - }
  13. - REMOVEARG(a, argc, argv);
  14. } else if (strcmp(argv[a], "-nosound") == 0) {
  15. this->setSound(0);
  16. this->setMusic(0);
  17. --- pinball-0.3.1.orig/src/LoaderModule.h
  18. +++ pinball-0.3.1/src/LoaderModule.h
  19. @@ -40,6 +40,9 @@
  20. /// portable dyn lib loading
  21. Behavior* readLibDynamic(string & filename);
  22. +private:
  23. + void SanitizePath(std::string&str );
  24. +
  25. protected:
  26. ///
  27. map<char* const, Behavior* , ltstr> m_hMods;
  28. --- pinball-0.3.1.orig/src/LoaderModule.cpp
  29. +++ pinball-0.3.1/src/LoaderModule.cpp
  30. @@ -61,6 +61,23 @@
  31. }
  32. //-----------------------------------------------------------------------------
  33. +void LoaderModule::SanitizePath(std::string&str )
  34. +{
  35. + // String to remove.
  36. + std::string sub = "../";
  37. +
  38. + typedef std::string::size_type st;
  39. + typedef std::string::iterator it;
  40. + st npos = std::string::npos;
  41. + st pos = 0;
  42. +
  43. + while((pos = str.find(sub)) != npos) {
  44. + it first = str.begin() + pos;
  45. + it last = first + sub.size();
  46. + str.erase(first, last);
  47. + }
  48. +}
  49. +
  50. /// is it possible to do something
  51. /// like in java.lang.reflexion instead of protypes ?
  52. Behavior* LoaderModule::readLibStatic(string & filename)
  53. @@ -82,6 +99,10 @@
  54. {
  55. EM_COUT("+ LoaderModule::readLibDynamic",0);
  56. Behavior * beh =0;
  57. +
  58. + // Disallow directory traversal
  59. + SanitizePath( filename );
  60. +
  61. #ifndef RZR_LIBSTATIC
  62. lt_dlhandle handle = lt_dlopen(filename.c_str());
  63. if (handle == NULL) {
  64. --- pinball-0.3.1.orig/src/Table.cpp
  65. +++ pinball-0.3.1/src/Table.cpp
  66. @@ -140,7 +140,7 @@
  67. Loader::getInstance()->clearSignalVariable();
  68. if (Loader::getInstance()->loadFile(filename.c_str(), engine) != 0) {
  69. cerr << "Error loading level: " << m_sTableName << endl;
  70. - cerr << "Try reinstalling the game or use the -data switch to specify the data directory"
  71. + cerr << "Try reinstalling the game"
  72. << endl;
  73. this->clear(engine);
  74. return -1;