planetarium / lib9c-wasm

The experimental project to port Lib9c into JavaScript environment through WASM. Build your Nine Chronicles network transaction in your local at once.
https://planetarium.github.io/lib9c-wasm/
GNU General Public License v3.0
5 stars 2 forks source link

Fix Infinite Recursion from C# Type Resolving #13

Closed Akamig closed 1 year ago

Akamig commented 1 year ago
Unhandled Exception:
StackOverflowException
[ERROR] FATAL UNHANDLED EXCEPTION: System.StackOverflowException: The requested operation caused a stack overflow.
   at System.Array.GetGenericValueImpl[RuntimeParameterInfo](Int32 pos, RuntimeParameterInfo& value)
   at System.Array.InternalArray__get_Item[RuntimeParameterInfo](Int32 index)
   at System.Linq.Enumerable.TryGetFirst[ParameterInfo](IEnumerable`1 source, Boolean& found)
   at System.Linq.Enumerable.First[ParameterInfo](IEnumerable`1 source)
   at Lib9c.Wasm.JsonUtils.<>c.<ResolveTypeImpl>b__3_9(ConstructorInfo ctr) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 294
   at System.Linq.Enumerable.WhereArrayIterator`1[[System.Reflection.ConstructorInfo, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Collections.Generic.EnumerableHelpers.ToArray[ConstructorInfo](IEnumerable`1 source, Int32& length)
   at System.Linq.Buffer`1[[System.Reflection.ConstructorInfo, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]..ctor(IEnumerable`1 source)
   at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__4[[System.Reflection.ConstructorInfo, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Linq.Enumerable.TryGetFirst[ConstructorInfo](IEnumerable`1 source, Boolean& found)
   at System.Linq.Enumerable.FirstOrDefault[ConstructorInfo](IEnumerable`1 source)
   at Lib9c.Wasm.JsonUtils.ResolveTypeImpl(Type type, String fieldName) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 292
   at Lib9c.Wasm.JsonUtils.ResolveType(Type type, String fieldName) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 154
   at Lib9c.Wasm.JsonUtils.<>c.<ResolveTypeImpl>b__3_3(Type t) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 271
   at System.Linq.Enumerable.WhereSelectArrayIterator`2[[System.Type, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1[[System.String, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1[[System.String, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[String](IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[String](IEnumerable`1 source)
   at Lib9c.Wasm.JsonUtils.ResolveTypeImpl(Type type, String fieldName) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 269
   at Lib9c.Wasm.JsonUtils.ResolveType(Type type, String fieldName) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 154
   at Lib9c.Wasm.JsonUtils.ResolveTypeImpl(Type type, String fieldName) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 306
   at Lib9c.Wasm.JsonUtils.ResolveType(Type type, String fieldName) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 154
   at Lib9c.Wasm.JsonUtils.<>c.<ResolveTypeImpl>b__3_3(Type t) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 271
   at System.Linq.Enumerable.WhereSelectArrayIterator`2[[System.Type, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1[[System.String, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1[[System.String, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[String](IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[String](IEnumerable`1 source)
   at Lib9c.Wasm.JsonUtils.ResolveTypeImpl(Type type, String fieldName) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 269
   at Lib9c.Wasm.JsonUtils.ResolveType(Type type, String fieldName) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 154
   at Lib9c.Wasm.JsonUtils.ResolveTypeImpl(Type type, String fieldName) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 306
   at Lib9c.Wasm.JsonUtils.ResolveType(Type type, String fieldName) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 154
   at Lib9c.Wasm.JsonUtils.<>c.<ResolveTypeImpl>b__3_3(Type t) in /Users/akamig/code/work/lib9c-wasm/Lib9c.Wasm/JsonUtils.cs:line 271
   at System.Linq.Enumerable.WhereSelectArrayIterator`2[[System.Type, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1[[System.String, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1[[System.String, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[String](IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[String](IEnumerable`1 source)
Akamig commented 1 year ago

Lib9c.Wasm 빌드 옵션으로 WasmDebugger를 사용할 수 있다는 사실을 발견해서 어떤 타입에서 걸리는지 스텝-바이-스텝으로 조사해볼 예정

Akamig commented 1 year ago

It was caused by not filtering ignored types & parameters early, so moved IgnoredType, IgnoredVariableName to upper part of code and prematurely end StringBuilder if filtered.