mirror of
				https://github.com/tailscale/tailscale.git
				synced 2025-11-04 10:11:18 +01:00 
			
		
		
		
	This adds an initial and intentionally minimal configuration for golang-ci, fixes the issues reported, and adds a GitHub Action to check new pull requests against this linter configuration. Signed-off-by: Andrew Dunham <andrew@du.nham.ca> Change-Id: I8f38fbc315836a19a094d0d3e986758b9313f163
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright (c) Tailscale Inc & AUTHORS
 | 
						|
// SPDX-License-Identifier: BSD-3-Clause
 | 
						|
 | 
						|
//go:build !js && !windows
 | 
						|
 | 
						|
package atomicfile
 | 
						|
 | 
						|
import (
 | 
						|
	"net"
 | 
						|
	"os"
 | 
						|
	"path/filepath"
 | 
						|
	"runtime"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestDoesNotOverwriteIrregularFiles(t *testing.T) {
 | 
						|
	// Per tailscale/tailscale#7658 as one example, almost any imagined use of
 | 
						|
	// atomicfile.Write should likely not attempt to overwrite an irregular file
 | 
						|
	// such as a device node, socket, or named pipe.
 | 
						|
 | 
						|
	const filename = "TestDoesNotOverwriteIrregularFiles"
 | 
						|
	var path string
 | 
						|
	// macOS private temp does not allow unix socket creation, but /tmp does.
 | 
						|
	if runtime.GOOS == "darwin" {
 | 
						|
		path = filepath.Join("/tmp", filename)
 | 
						|
		t.Cleanup(func() { os.Remove(path) })
 | 
						|
	} else {
 | 
						|
		path = filepath.Join(t.TempDir(), filename)
 | 
						|
	}
 | 
						|
 | 
						|
	// The least troublesome thing to make that is not a file is a unix socket.
 | 
						|
	// Making a null device sadly requires root.
 | 
						|
	l, err := net.ListenUnix("unix", &net.UnixAddr{Name: path, Net: "unix"})
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	defer l.Close()
 | 
						|
 | 
						|
	err = WriteFile(path, []byte("hello"), 0644)
 | 
						|
	if err == nil {
 | 
						|
		t.Fatal("expected error, got nil")
 | 
						|
	}
 | 
						|
	if !strings.Contains(err.Error(), "is not a regular file") {
 | 
						|
		t.Fatalf("unexpected error: %v", err)
 | 
						|
	}
 | 
						|
}
 |