Error: invalid memory address or nil pointer dereference #8510

Closed
opened 2025-11-02 08:09:14 -06:00 by GiteaMirror · 6 comments
Owner

Originally created by @pboguslawski on GitHub (Feb 5, 2022).

Gitea Version

1.16-rc1

Git Version

No response

Operating System

No response

How are you running Gitea?

Compiled from source.

Database

No response

Can you reproduce the bug on the Gitea demo site?

No

Log Gist

No response

Description

A single case was caught:

2022/02/05 21:20:50 ...s/context/context.go:377:JSON() [E] Render JSON failed: write tcp giteahostip:3000->clientip:52624: write: connection reset by peer
2022/02/05 21:20:50 ...common/middleware.go:70:1() [E] PANIC: runtime error: invalid memory address or nil pointer dereference
    /usr/lib/go-1.17/src/runtime/panic.go:221 (0x44dc66)
    /usr/lib/go-1.17/src/runtime/signal_unix.go:735 (0x44dc36)
    /src/somepath/gitea-build/modules/context/context.go:201 (0x14d2083)
    /src/somepath/gitea-build/modules/context/context.go:273 (0x14d2ae9)
    /src/somepath/gitea-build/modules/context/context.go:261 (0x14d479b)
    /src/somepath/gitea-build/modules/context/context.go:377 (0x14d477f)
    /src/somepath/gitea-build/routers/api/v1/repo/repo.go:239 (0x1daf584)
    /src/somepath/gitea-build/modules/web/route.go:80 (0x1cb0f66)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:442 (0x14c6a15)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /src/somepath/gitea-build/modules/web/route.go:144 (0x1cb1a4d)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /src/somepath/gitea-build/modules/web/route.go:144 (0x1cb1a4d)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /src/somepath/gitea-build/modules/context/api.go:307 (0x14ced5a)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /src/somepath/gitea-build/routers/api/v1/api.go:1107 (0x1de2a33)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /pkg/mod/gitea.com/go-chi/session@v0.0.0-20211218221615-e3605d8b28b8/session.go:257 (0x12cbf3d)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:71 (0x14c484c)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:314 (0x14c61fb)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:442 (0x14c6a15)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /src/somepath/gitea-build/routers/common/middleware.go:78 (0x1ce80e1)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/middleware/strip.go:30 (0x1ce2bb8)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /pkg/mod/github.com/chi-middleware/proxy@v1.1.1/middleware.go:37 (0x1cdf476)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /src/somepath/gitea-build/routers/common/middleware.go:31 (0x1ce7f39)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:88 (0x14c4801)
    /src/somepath/gitea-build/modules/web/route.go:328 (0x1cb42ed)
    /usr/lib/go-1.17/src/net/http/server.go:2879 (0x77efba)
    /usr/lib/go-1.17/src/net/http/server.go:1930 (0x77ab27)
    /usr/lib/go-1.17/src/runtime/asm_amd64.s:1581 (0x46ad60)

Screenshots

No response

Originally created by @pboguslawski on GitHub (Feb 5, 2022). ### Gitea Version 1.16-rc1 ### Git Version _No response_ ### Operating System _No response_ ### How are you running Gitea? Compiled from source. ### Database _No response_ ### Can you reproduce the bug on the Gitea demo site? No ### Log Gist _No response_ ### Description A single case was caught: ``` 2022/02/05 21:20:50 ...s/context/context.go:377:JSON() [E] Render JSON failed: write tcp giteahostip:3000->clientip:52624: write: connection reset by peer 2022/02/05 21:20:50 ...common/middleware.go:70:1() [E] PANIC: runtime error: invalid memory address or nil pointer dereference /usr/lib/go-1.17/src/runtime/panic.go:221 (0x44dc66) /usr/lib/go-1.17/src/runtime/signal_unix.go:735 (0x44dc36) /src/somepath/gitea-build/modules/context/context.go:201 (0x14d2083) /src/somepath/gitea-build/modules/context/context.go:273 (0x14d2ae9) /src/somepath/gitea-build/modules/context/context.go:261 (0x14d479b) /src/somepath/gitea-build/modules/context/context.go:377 (0x14d477f) /src/somepath/gitea-build/routers/api/v1/repo/repo.go:239 (0x1daf584) /src/somepath/gitea-build/modules/web/route.go:80 (0x1cb0f66) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:442 (0x14c6a15) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /src/somepath/gitea-build/modules/web/route.go:144 (0x1cb1a4d) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /src/somepath/gitea-build/modules/web/route.go:144 (0x1cb1a4d) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /src/somepath/gitea-build/modules/context/api.go:307 (0x14ced5a) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /src/somepath/gitea-build/routers/api/v1/api.go:1107 (0x1de2a33) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /pkg/mod/gitea.com/go-chi/session@v0.0.0-20211218221615-e3605d8b28b8/session.go:257 (0x12cbf3d) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:71 (0x14c484c) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:314 (0x14c61fb) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:442 (0x14c6a15) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /src/somepath/gitea-build/routers/common/middleware.go:78 (0x1ce80e1) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/middleware/strip.go:30 (0x1ce2bb8) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /pkg/mod/github.com/chi-middleware/proxy@v1.1.1/middleware.go:37 (0x1cdf476) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /src/somepath/gitea-build/routers/common/middleware.go:31 (0x1ce7f39) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77ba4e) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:88 (0x14c4801) /src/somepath/gitea-build/modules/web/route.go:328 (0x1cb42ed) /usr/lib/go-1.17/src/net/http/server.go:2879 (0x77efba) /usr/lib/go-1.17/src/net/http/server.go:1930 (0x77ab27) /usr/lib/go-1.17/src/runtime/asm_amd64.s:1581 (0x46ad60) ``` ### Screenshots _No response_
GiteaMirror added the type/bug label 2025-11-02 08:09:14 -06:00
Author
Owner

@zeripath commented on GitHub (Feb 5, 2022):

a97c8a8966/routers/api/v1/repo/repo.go (L239)

@zeripath commented on GitHub (Feb 5, 2022): https://github.com/go-gitea/gitea/blob/a97c8a89660d39b4f8b73649e1bd7da3c153ae99/routers/api/v1/repo/repo.go#L239
Author
Owner
@zeripath commented on GitHub (Feb 5, 2022): https://github.com/go-gitea/gitea/blob/a97c8a89660d39b4f8b73649e1bd7da3c153ae99/modules/context/context.go#L377 https://github.com/go-gitea/gitea/blob/a97c8a89660d39b4f8b73649e1bd7da3c153ae99/modules/context/context.go#L261 https://github.com/go-gitea/gitea/blob/a97c8a89660d39b4f8b73649e1bd7da3c153ae99/modules/context/context.go#L273 https://github.com/go-gitea/gitea/blob/a97c8a89660d39b4f8b73649e1bd7da3c153ae99/modules/context/context.go#L201
Author
Owner

@zeripath commented on GitHub (Feb 5, 2022):

I don't understand how a nil pointer exception can happen here.

@zeripath commented on GitHub (Feb 5, 2022): I don't understand how a nil pointer exception can happen here.
Author
Owner

@zeripath commented on GitHub (Feb 5, 2022):

Ok I guess we just need to stop attempting to render if the underlying error is connection reset by peer.

@zeripath commented on GitHub (Feb 5, 2022): Ok I guess we just need to stop attempting to render if the underlying error is connection reset by peer.
Author
Owner

@pboguslawski commented on GitHub (Mar 10, 2022):

Gitea 1.16.1 (built from 3d08e3a08c, includes fix https://github.com/go-gitea/gitea/pull/18642/files) still throws sometimes:

2022/03/09 22:39:02 ...s/context/context.go:385:JSON() [E] Render JSON failed: write tcp giteahostip:3000->clientip:43562: write: broken pipe
2022/03/09 22:39:02 ...common/middleware.go:70:1() [E] PANIC: runtime error: invalid memory address or nil pointer dereference
    /usr/lib/go-1.17/src/runtime/panic.go:221 (0x44dc66)
    /usr/lib/go-1.17/src/runtime/signal_unix.go:735 (0x44dc36)
    /src/vcs.ib.loc/ib/gitea-build/modules/context/context.go:203 (0x14d24c3)
    /src/vcs.ib.loc/ib/gitea-build/modules/context/context.go:281 (0x14d2f64)
    /src/vcs.ib.loc/ib/gitea-build/modules/context/context.go:263 (0x14d4c1b)
    /src/vcs.ib.loc/ib/gitea-build/modules/context/context.go:385 (0x14d4bff)
    /src/vcs.ib.loc/ib/gitea-build/routers/api/v1/repo/repo.go:239 (0x1dafc84)
    /src/vcs.ib.loc/ib/gitea-build/modules/web/route.go:80 (0x1cb1466)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:442 (0x14c6e55)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /src/vcs.ib.loc/ib/gitea-build/modules/web/route.go:144 (0x1cb1f4d)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /src/vcs.ib.loc/ib/gitea-build/modules/web/route.go:144 (0x1cb1f4d)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /src/vcs.ib.loc/ib/gitea-build/modules/context/api.go:307 (0x14cf19a)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /src/vcs.ib.loc/ib/gitea-build/routers/api/v1/api.go:1107 (0x1de3133)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /pkg/mod/gitea.com/go-chi/session@v0.0.0-20211218221615-e3605d8b28b8/session.go:257 (0x12cb91d)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:71 (0x14c4c8c)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:314 (0x14c663b)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:442 (0x14c6e55)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /src/vcs.ib.loc/ib/gitea-build/routers/common/middleware.go:78 (0x1ce8601)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/middleware/strip.go:30 (0x1ce30d8)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /pkg/mod/github.com/chi-middleware/proxy@v1.1.1/middleware.go:37 (0x1cdf996)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /src/vcs.ib.loc/ib/gitea-build/routers/common/middleware.go:31 (0x1ce8459)
    /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae)
    /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:88 (0x14c4c41)
    /src/vcs.ib.loc/ib/gitea-build/modules/web/route.go:328 (0x1cb47ed)
    /usr/lib/go-1.17/src/net/http/server.go:2879 (0x77f21a)
    /usr/lib/go-1.17/src/net/http/server.go:1930 (0x77ad87)
    /usr/lib/go-1.17/src/runtime/asm_amd64.s:1581 (0x46ad60)
@pboguslawski commented on GitHub (Mar 10, 2022): Gitea 1.16.1 (built from 3d08e3a08c04d5abdca15ddcb3eef32362ee5946, includes fix https://github.com/go-gitea/gitea/pull/18642/files) still throws sometimes: ``` 2022/03/09 22:39:02 ...s/context/context.go:385:JSON() [E] Render JSON failed: write tcp giteahostip:3000->clientip:43562: write: broken pipe 2022/03/09 22:39:02 ...common/middleware.go:70:1() [E] PANIC: runtime error: invalid memory address or nil pointer dereference /usr/lib/go-1.17/src/runtime/panic.go:221 (0x44dc66) /usr/lib/go-1.17/src/runtime/signal_unix.go:735 (0x44dc36) /src/vcs.ib.loc/ib/gitea-build/modules/context/context.go:203 (0x14d24c3) /src/vcs.ib.loc/ib/gitea-build/modules/context/context.go:281 (0x14d2f64) /src/vcs.ib.loc/ib/gitea-build/modules/context/context.go:263 (0x14d4c1b) /src/vcs.ib.loc/ib/gitea-build/modules/context/context.go:385 (0x14d4bff) /src/vcs.ib.loc/ib/gitea-build/routers/api/v1/repo/repo.go:239 (0x1dafc84) /src/vcs.ib.loc/ib/gitea-build/modules/web/route.go:80 (0x1cb1466) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:442 (0x14c6e55) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /src/vcs.ib.loc/ib/gitea-build/modules/web/route.go:144 (0x1cb1f4d) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /src/vcs.ib.loc/ib/gitea-build/modules/web/route.go:144 (0x1cb1f4d) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /src/vcs.ib.loc/ib/gitea-build/modules/context/api.go:307 (0x14cf19a) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /src/vcs.ib.loc/ib/gitea-build/routers/api/v1/api.go:1107 (0x1de3133) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /pkg/mod/gitea.com/go-chi/session@v0.0.0-20211218221615-e3605d8b28b8/session.go:257 (0x12cb91d) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:71 (0x14c4c8c) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:314 (0x14c663b) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:442 (0x14c6e55) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /src/vcs.ib.loc/ib/gitea-build/routers/common/middleware.go:78 (0x1ce8601) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/middleware/strip.go:30 (0x1ce30d8) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /pkg/mod/github.com/chi-middleware/proxy@v1.1.1/middleware.go:37 (0x1cdf996) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /src/vcs.ib.loc/ib/gitea-build/routers/common/middleware.go:31 (0x1ce8459) /usr/lib/go-1.17/src/net/http/server.go:2047 (0x77bcae) /pkg/mod/github.com/go-chi/chi/v5@v5.0.4/mux.go:88 (0x14c4c41) /src/vcs.ib.loc/ib/gitea-build/modules/web/route.go:328 (0x1cb47ed) /usr/lib/go-1.17/src/net/http/server.go:2879 (0x77f21a) /usr/lib/go-1.17/src/net/http/server.go:1930 (0x77ad87) /usr/lib/go-1.17/src/runtime/asm_amd64.s:1581 (0x46ad60) ```
Author
Owner

@zeripath commented on GitHub (Mar 10, 2022):

Well this is irritating.

package main

import (
	"errors"
	"fmt"
	"net"
)

func main() {
	opError := &net.OpError{Op: "write", Net: "", Err: fmt.Errorf("random")}
	fmt.Println(opError)

	fmt.Println(errors.Is(opError, &net.OpError{}))
}

a *net.OpError does not pass errors.Is(err, &net.OpError).

We'll have to try again with just plain type checking because go's errors.Is just doesn't do what it should do.

@zeripath commented on GitHub (Mar 10, 2022): Well this is irritating. ```go package main import ( "errors" "fmt" "net" ) func main() { opError := &net.OpError{Op: "write", Net: "", Err: fmt.Errorf("random")} fmt.Println(opError) fmt.Println(errors.Is(opError, &net.OpError{})) } ``` a `*net.OpError` does not pass `errors.Is(err, &net.OpError)`. We'll have to try again with just plain type checking because go's errors.Is just doesn't do what it should do.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/gitea#8510