OSDN Git Service

[sfz] Add #include count limit
authorStarg <starg@users.osdn.me>
Thu, 5 Sep 2019 08:33:15 +0000 (17:33 +0900)
committerStarg <starg@users.osdn.me>
Thu, 5 Sep 2019 08:33:15 +0000 (17:33 +0900)
timidity/sfz.cpp

index eff80e0..2b1fd0a 100644 (file)
@@ -695,8 +695,19 @@ public:
 
                     continue;
                 }
-                else if (Word(curView, "#include"))
+                else if (auto defView = curView; Word(curView, "#include"))
                 {
+                    m_IncludeCount++;
+
+                    if (m_IncludeCount > 10000)
+                    {
+                        throw ParserException(
+                            m_FileNames[curView.GetLocationInfo().FileID],
+                            curView.GetLocationInfo().Line,
+                            "too many #include directives (possible recursion?)"
+                        );
+                    }
+
                     DoSkips(curView);
 
                     TextBuffer::View pathView;
@@ -800,6 +811,7 @@ private:
     std::stack<InputStackItem, std::vector<InputStackItem>> m_InputStack;
     TextBuffer m_OutBuffer;
     std::unordered_map<std::string, TextBuffer::View> m_DefinedMacros;
+    std::int32_t m_IncludeCount = 0;
 };
 
 enum class OpCodeKind