mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-08-03 03:36:22 -07:00
Fix changes suggested by sqlclosecheck
This commit is contained in:
parent
27a0142864
commit
1032042472
12 changed files with 87 additions and 27 deletions
|
@ -282,19 +282,22 @@ func BuildBoardPages(board *gcsql.Board) error {
|
||||||
func BuildBoards(verbose bool, which ...int) error {
|
func BuildBoards(verbose bool, which ...int) error {
|
||||||
var boards []gcsql.Board
|
var boards []gcsql.Board
|
||||||
var err error
|
var err error
|
||||||
|
errEv := gcutil.LogError(nil)
|
||||||
|
defer errEv.Discard()
|
||||||
|
|
||||||
if which == nil {
|
if which == nil {
|
||||||
boards, err = gcsql.GetAllBoards(false)
|
boards, err = gcsql.GetAllBoards(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errEv.Err(err).Caller().Send()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for _, boardID := range which {
|
for _, boardID := range which {
|
||||||
board, err := gcsql.GetBoardFromID(boardID)
|
board, err := gcsql.GetBoardFromID(boardID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
gcutil.LogError(err).
|
errEv.Err(err).Caller().
|
||||||
Int("boardid", boardID).
|
Int("boardid", boardID).
|
||||||
Caller().Msg("Unable to get board information")
|
Msg("Unable to get board information")
|
||||||
return fmt.Errorf("unable to get board information (ID: %d): %s", boardID, err.Error())
|
return fmt.Errorf("unable to get board information (ID: %d): %s", boardID, err.Error())
|
||||||
}
|
}
|
||||||
boards = append(boards, *board)
|
boards = append(boards, *board)
|
||||||
|
@ -314,6 +317,7 @@ func BuildBoards(verbose bool, which ...int) error {
|
||||||
gcutil.LogInfo().Str("board", board.Dir).
|
gcutil.LogInfo().Str("board", board.Dir).
|
||||||
Msg("Built board successfully")
|
Msg("Built board successfully")
|
||||||
} else if err == nil {
|
} else if err == nil {
|
||||||
|
gcutil.LogError(err).Caller().Str("board", board.Dir).Msg("Unable to build board")
|
||||||
err = tmpErr
|
err = tmpErr
|
||||||
}
|
}
|
||||||
wg.Done()
|
wg.Done()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package building
|
package building
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"net"
|
"net"
|
||||||
|
@ -128,18 +129,21 @@ func (p *Post) Stickied() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func QueryPosts(query string, params []any, cb func(*Post) error) error {
|
func QueryPosts(query string, params []any, cb func(*Post) error) error {
|
||||||
rows, err := gcsql.QuerySQL(query, params...)
|
sqlCfg := config.GetSQLConfig()
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(sqlCfg.DBTimeoutSeconds)*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
rows, err := gcsql.QueryContextSQL(ctx, nil, query, params...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
dbType := config.GetSystemCriticalConfig().DBtype
|
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var post Post
|
var post Post
|
||||||
dest := []any{&post.ID, &post.thread.ID}
|
dest := []any{&post.ID, &post.thread.ID}
|
||||||
var ip string
|
var ip string
|
||||||
if dbType == "mysql" {
|
if sqlCfg.DBtype == "mysql" {
|
||||||
dest = append(dest, &post.IP)
|
dest = append(dest, &post.IP)
|
||||||
} else {
|
} else {
|
||||||
dest = append(dest, &ip)
|
dest = append(dest, &ip)
|
||||||
|
@ -155,7 +159,7 @@ func QueryPosts(query string, params []any, cb func(*Post) error) error {
|
||||||
if err = rows.Scan(dest...); err != nil {
|
if err = rows.Scan(dest...); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if dbType != "mysql" {
|
if sqlCfg.DBtype != "mysql" {
|
||||||
post.IP = net.ParseIP(ip)
|
post.IP = net.ParseIP(ip)
|
||||||
if post.IP == nil {
|
if post.IP == nil {
|
||||||
return fmt.Errorf("invalid IP address %q", ip)
|
return fmt.Errorf("invalid IP address %q", ip)
|
||||||
|
|
|
@ -238,6 +238,7 @@ func NewNameBan(name string, isRegex bool, boardID int, staffID int, staffNote s
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer stmt.Close()
|
||||||
if _, err = stmt.Exec(ban.BoardID, staffID, staffNote, name, isRegex); err != nil {
|
if _, err = stmt.Exec(ban.BoardID, staffID, staffNote, name, isRegex); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -252,7 +253,7 @@ func NewNameBan(name string, isRegex bool, boardID int, staffID int, staffNote s
|
||||||
ban.StaffNote = staffNote
|
ban.StaffNote = staffNote
|
||||||
ban.Username = name
|
ban.Username = name
|
||||||
ban.IsRegex = isRegex
|
ban.IsRegex = isRegex
|
||||||
return &ban, nil
|
return &ban, stmt.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetNameBans(boardID int, limit int) ([]UsernameBan, error) {
|
func GetNameBans(boardID int, limit int) ([]UsernameBan, error) {
|
||||||
|
@ -373,6 +374,7 @@ func NewFilenameBan(filename string, isRegex bool, boardID int, staffID int, sta
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer stmt.Close()
|
||||||
if _, err = stmt.Exec(ban.BoardID, staffID, staffNote, filename, isRegex); err != nil {
|
if _, err = stmt.Exec(ban.BoardID, staffID, staffNote, filename, isRegex); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -387,7 +389,7 @@ func NewFilenameBan(filename string, isRegex bool, boardID int, staffID int, sta
|
||||||
ban.StaffNote = staffNote
|
ban.StaffNote = staffNote
|
||||||
ban.Filename = filename
|
ban.Filename = filename
|
||||||
ban.IsRegex = isRegex
|
ban.IsRegex = isRegex
|
||||||
return &ban, nil
|
return &ban, stmt.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ub filenameOrUsernameBanBase) IsGlobalBan() bool {
|
func (ub filenameOrUsernameBanBase) IsGlobalBan() bool {
|
||||||
|
@ -498,6 +500,7 @@ func NewFileChecksumBan(checksum string, fingerprinter string, boardID int, staf
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer stmt.Close()
|
||||||
if _, err = stmt.Exec(
|
if _, err = stmt.Exec(
|
||||||
ban.BoardID, staffID, staffNote, checksum, fingerprinter, banIP, banReason,
|
ban.BoardID, staffID, staffNote, checksum, fingerprinter, banIP, banReason,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
|
@ -512,7 +515,7 @@ func NewFileChecksumBan(checksum string, fingerprinter string, boardID int, staf
|
||||||
ban.StaffID = staffID
|
ban.StaffID = staffID
|
||||||
ban.StaffNote = staffNote
|
ban.StaffNote = staffNote
|
||||||
ban.Checksum = checksum
|
ban.Checksum = checksum
|
||||||
return &ban, nil
|
return &ban, stmt.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fb *FileBan) IsGlobalBan() bool {
|
func (fb *FileBan) IsGlobalBan() bool {
|
||||||
|
|
|
@ -65,6 +65,8 @@ func GetAllBoards(onlyNonHidden bool) ([]Board, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
var boards []Board
|
var boards []Board
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var board Board
|
var board Board
|
||||||
|
@ -75,7 +77,6 @@ func GetAllBoards(onlyNonHidden bool) ([]Board, error) {
|
||||||
&board.MaxMessageLength, &board.MinMessageLength, &board.AllowEmbeds, &board.RedirectToThread, &board.RequireFile,
|
&board.MaxMessageLength, &board.MinMessageLength, &board.AllowEmbeds, &board.RedirectToThread, &board.RequireFile,
|
||||||
&board.EnableCatalog,
|
&board.EnableCatalog,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
rows.Close()
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
boards = append(boards, board)
|
boards = append(boards, board)
|
||||||
|
|
|
@ -129,9 +129,9 @@ func (db *GCDB) ExecSQL(query string, values ...any) (sql.Result, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer stmt.Close()
|
||||||
result, err := stmt.Exec(values...)
|
result, err := stmt.Exec(values...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
stmt.Close()
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return result, stmt.Close()
|
return result, stmt.Close()
|
||||||
|
@ -154,9 +154,10 @@ func (db *GCDB) ExecContextSQL(ctx context.Context, tx *sql.Tx, sqlStr string, v
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer stmt.Close()
|
||||||
|
|
||||||
result, err := stmt.ExecContext(ctx, values...)
|
result, err := stmt.ExecContext(ctx, values...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
stmt.Close()
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return result, stmt.Close()
|
return result, stmt.Close()
|
||||||
|
@ -180,7 +181,12 @@ func (db *GCDB) ExecTxSQL(tx *sql.Tx, query string, values ...any) (sql.Result,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return stmt.Exec(values...)
|
defer stmt.Close()
|
||||||
|
res, err := stmt.Exec(values...)
|
||||||
|
if err != nil {
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
return res, stmt.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -240,8 +246,9 @@ func (db *GCDB) QueryRowContextSQL(ctx context.Context, tx *sql.Tx, query string
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
defer stmt.Close()
|
||||||
|
|
||||||
if err = stmt.QueryRowContext(ctx, values...).Scan(out...); err != nil {
|
if err = stmt.QueryRowContext(ctx, values...).Scan(out...); err != nil {
|
||||||
stmt.Close()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return stmt.Close()
|
return stmt.Close()
|
||||||
|
@ -268,8 +275,9 @@ func (db *GCDB) QueryRowTxSQL(tx *sql.Tx, query string, values, out []any) error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
defer stmt.Close()
|
||||||
|
|
||||||
if err = stmt.QueryRow(values...).Scan(out...); err != nil {
|
if err = stmt.QueryRow(values...).Scan(out...); err != nil {
|
||||||
stmt.Close()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return stmt.Close()
|
return stmt.Close()
|
||||||
|
@ -314,7 +322,13 @@ func (db *GCDB) QueryContextSQL(ctx context.Context, tx *sql.Tx, query string, a
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return stmt.QueryContext(ctx, a...)
|
defer stmt.Close()
|
||||||
|
|
||||||
|
rows, err := stmt.QueryContext(ctx, a...)
|
||||||
|
if err != nil {
|
||||||
|
return rows, err
|
||||||
|
}
|
||||||
|
return rows, stmt.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -384,6 +384,8 @@ func (p *Post) Insert(bumpThread bool, boardID int, locked bool, stickied bool,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
defer stmt.Close()
|
||||||
|
|
||||||
if _, err = stmt.Exec(
|
if _, err = stmt.Exec(
|
||||||
p.ThreadID, p.IsTopPost, p.IP, p.Name, p.Tripcode, p.IsRoleSignature, p.Email, p.Subject,
|
p.ThreadID, p.IsTopPost, p.IP, p.Name, p.Tripcode, p.IsRoleSignature, p.Email, p.Subject,
|
||||||
p.Message, p.MessageRaw, p.Password, p.Flag, p.Country,
|
p.Message, p.MessageRaw, p.Password, p.Flag, p.Country,
|
||||||
|
@ -398,11 +400,19 @@ func (p *Post) Insert(bumpThread bool, boardID int, locked bool, stickied bool,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
defer stmt2.Close()
|
||||||
|
|
||||||
if _, err = stmt2.Exec(p.ThreadID); err != nil {
|
if _, err = stmt2.Exec(p.ThreadID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err = stmt2.Close(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
if err = tx.Commit(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return stmt.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Post) WebPath() string {
|
func (p *Post) WebPath() string {
|
||||||
|
|
|
@ -68,6 +68,7 @@ func (p *Post) AttachFile(upload *Upload) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
defer stmt.Close()
|
||||||
|
|
||||||
if upload.FileOrder < 1 {
|
if upload.FileOrder < 1 {
|
||||||
upload.FileOrder, err = p.nextFileOrder()
|
upload.FileOrder, err = p.nextFileOrder()
|
||||||
|
@ -85,7 +86,10 @@ func (p *Post) AttachFile(upload *Upload) error {
|
||||||
if upload.ID, err = getLatestID("DBPREFIXfiles", tx); err != nil {
|
if upload.ID, err = getLatestID("DBPREFIXfiles", tx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return tx.Commit()
|
if err = tx.Commit(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return stmt.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetUploadFilenameAndBoard returns the filename (or an empty string) and
|
// GetUploadFilenameAndBoard returns the filename (or an empty string) and
|
||||||
|
|
|
@ -143,7 +143,12 @@ func ExecTxSQL(tx *sql.Tx, sqlStr string, values ...any) (sql.Result, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return stmt.Exec(values...)
|
defer stmt.Close()
|
||||||
|
res, err := stmt.Exec(values...)
|
||||||
|
if err != nil {
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
return res, stmt.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -271,7 +276,13 @@ func QueryTxSQL(tx *sql.Tx, query string, a ...any) (*sql.Rows, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return stmt.Query(a...)
|
defer stmt.Close()
|
||||||
|
|
||||||
|
rows, err := stmt.Query(a...)
|
||||||
|
if err != nil {
|
||||||
|
return rows, err
|
||||||
|
}
|
||||||
|
return rows, stmt.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseSQLTimeString(str string) (time.Time, error) {
|
func ParseSQLTimeString(str string) (time.Time, error) {
|
||||||
|
@ -294,7 +305,11 @@ func getLatestID(tableName string, tx *sql.Tx) (id int, err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
err = stmt.QueryRow().Scan(&id)
|
defer stmt.Close()
|
||||||
|
if err = stmt.QueryRow().Scan(&id); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = stmt.Close()
|
||||||
} else {
|
} else {
|
||||||
err = QueryRowSQL(query, nil, []any{&id})
|
err = QueryRowSQL(query, nil, []any{&id})
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,10 +75,15 @@ func tcPrepareContextSQL(t *testing.T, mock sqlmock.Sqlmock, tC *testCase[prepar
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPrepareContextSQL(t *testing.T) {
|
func TestPrepareContextSQL(t *testing.T) {
|
||||||
_, err := PrepareContextSQL(context.Background(), "", nil)
|
stmt, err := PrepareContextSQL(context.Background(), "", nil)
|
||||||
if !assert.Error(t, err) {
|
if !assert.Error(t, err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer func() {
|
||||||
|
if stmt != nil {
|
||||||
|
assert.NoError(t, stmt.Close())
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
mock := setupMockDB(t)
|
mock := setupMockDB(t)
|
||||||
testCases := []testCase[prepareFunc]{
|
testCases := []testCase[prepareFunc]{
|
||||||
|
|
|
@ -425,10 +425,9 @@ func reportsCallback(_ http.ResponseWriter, request *http.Request, staff *gcsql.
|
||||||
dismissID := gcutil.HackyStringToInt(dismissIDstr)
|
dismissID := gcutil.HackyStringToInt(dismissIDstr)
|
||||||
block := request.FormValue("block")
|
block := request.FormValue("block")
|
||||||
if block != "" && staff.Rank != 3 {
|
if block != "" && staff.Rank != 3 {
|
||||||
errEv.
|
errEv.Caller().
|
||||||
Int("postID", dismissID).
|
Int("postID", dismissID).
|
||||||
Str("rejected", "not an admin").
|
Str("rejected", "not an admin").Send()
|
||||||
Caller().Send()
|
|
||||||
return "", errors.New("only the administrator can block reports")
|
return "", errors.New("only the administrator can block reports")
|
||||||
}
|
}
|
||||||
found, err := gcsql.ClearReport(dismissID, staff.ID, block != "" && staff.Rank == 3)
|
found, err := gcsql.ClearReport(dismissID, staff.ID, block != "" && staff.Rank == 3)
|
||||||
|
|
|
@ -26,6 +26,7 @@ func getAllAnnouncements() ([]announcementWithName, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer rows.Close()
|
||||||
var announcements []announcementWithName
|
var announcements []announcementWithName
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var announcement announcementWithName
|
var announcement announcementWithName
|
||||||
|
|
|
@ -77,10 +77,10 @@ func createSession(key, username, password string, request *http.Request, writer
|
||||||
})
|
})
|
||||||
|
|
||||||
if err = staff.CreateLoginSession(key); err != nil {
|
if err = staff.CreateLoginSession(key); err != nil {
|
||||||
gcutil.LogError(err).
|
errEv.Err(err).Caller().
|
||||||
Str("staff", username).
|
Str("staff", username).
|
||||||
Str("sessionKey", key).
|
Str("sessionKey", key).
|
||||||
Caller().Msg("Error creating new staff session")
|
Msg("Error creating new staff session")
|
||||||
return ErrUnableToCreateSession
|
return ErrUnableToCreateSession
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue