Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions core/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ func (m *DynamicModule) New(opt NewModuleOptions) Module {
newMod := &DynamicModule{isRoot: false}
newMod.DataProviders = append(newMod.DataProviders, m.GetExports()...)
newMod.Middlewares = append(newMod.Middlewares, m.Middlewares...)
if newMod.interceptor == nil {
newMod.interceptor = m.interceptor
}
Comment on lines +104 to +106
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

🧩 Analysis chain

Interceptor inheritance is applied too early and gets overwritten by initModule.

initModule unconditionally assigns module.interceptor = opt.Interceptor (Line 137). Your pre-init nil-check sets newMod.interceptor, but it’s then clobbered when opt.Interceptor is nil. Do the fallback on opt before calling initModule, or guard the assignment inside initModule.

Apply this diff in New():

   newMod := &DynamicModule{isRoot: false}
   newMod.DataProviders = append(newMod.DataProviders, m.GetExports()...)
   newMod.Middlewares = append(newMod.Middlewares, m.Middlewares...)
-  if newMod.interceptor == nil {
-    newMod.interceptor = m.interceptor
-  }
+  // Inherit parent interceptor only when none provided
+  if opt.Interceptor == nil {
+    opt.Interceptor = m.interceptor
+  }

   initModule(newMod, opt)
   return newMod

Alternatively (if you prefer keeping the current call site unchanged), guard the interceptor set in initModule:

-  module.interceptor = opt.Interceptor
+  if opt.Interceptor != nil {
+    module.interceptor = opt.Interceptor
+  }

Run to confirm no other writes override the interceptor unexpectedly:


🏁 Script executed:

#!/bin/bash
# List all assignments to .interceptor to ensure no later overwrite
rg -n --type=go -C2 '\.interceptor\s*='

Length of output: 1298


Fix interceptor inheritance being clobbered by initModule

initModule unconditionally sets module.interceptor = opt.Interceptor (core/module.go:137), which overwrites the fallback done earlier in New() (core/module.go:104–106). Either apply the fallback to opt before calling initModule or guard the assignment in initModule.

Apply this diff in New():

   newMod := &DynamicModule{isRoot: false}
   newMod.DataProviders = append(newMod.DataProviders, m.GetExports()...)
   newMod.Middlewares = append(newMod.Middlewares, m.Middlewares...)
-  if newMod.interceptor == nil {
-    newMod.interceptor = m.interceptor
-  }
+  // Inherit parent interceptor only when none provided
+  if opt.Interceptor == nil {
+    opt.Interceptor = m.interceptor
+  }

   initModule(newMod, opt)
   return newMod

Or guard inside initModule:

-  module.interceptor = opt.Interceptor
+  if opt.Interceptor != nil {
+    module.interceptor = opt.Interceptor
+  }

core/module.go:104–106,137.

🤖 Prompt for AI Agents
core/module.go lines 104-106 and 137: New() sets a fallback interceptor on
newMod (lines 104–106) but initModule unconditionally assigns module.interceptor
= opt.Interceptor at line 137, clobbering the fallback; either copy the fallback
into opt.Interceptor before calling initModule so initModule uses the
already-resolved interceptor, or change initModule to only assign
module.interceptor = opt.Interceptor if opt.Interceptor != nil (i.e., guard the
assignment) so the fallback set in New() isn't overwritten.


initModule(newMod, opt)
return newMod
Expand Down