Golangで†いたずら†をできるパッケージたち。
⚠️ **決してこのパッケージを悪用しないでください。**OSSに対してこのパッケージを含むPRを出すようなことはやめましょう。
Golangは予約語が25個と少ない言語です。
その代わり、他の言語では予約語となっていることの多いtrue
、false
等もuniverse blockで定義されたPredicrared Identifierとなっています。
そのため、true
やfalse
などの名前の変数を定義し、元のtrue
、false
などを使えなくできるのは広く知られています。
これがファイル内にtrue
、false
などの文字列がない状態でされたら地獄が生まれそう、
と考え、実際にやってみたのがこのrepositoryです。
packageはfile blockで宣言されるIdentifierなため、packageでPredicrared Identifierを上書きすることが出来ます。 また、importは
go get github.com/mazrean/evil-package
重要なことなのでもう一度。
⚠️ **決してこのパッケージを悪用しないでください。**OSSに対してこのパッケージを含むPRを出すようなことはやめましょう。
このリポジトリ内の好きなパッケージをimportしましょう。
ファイル内でtrue
、nil
などの事前定義された定数が使えなくなったりして地獄が生まれるでしょう。
package main
import (
"fmt"
"github.com/mazrean/evil-package/echo"
)
func main() {
println(true) //error!
}
evil-package
という名前では悪さをすることがすぐに見抜けれてしまうでしょう。
replaceを使って、
まともなパッケージに偽装しましょう。
より酷い地獄が生まれるかも知れません。
module your.repository
go 1.15
require github.com/labstack/echo/v4 v4.1.14
replace github.com/labstack/echo/v4 v4.1.14 => github.com/mazrean/evil-package/echo
ここまでで十分害悪ですね。
しかし、これではPRをみられたときにgo.mod
に不自然な変更があると怪しまれてしまうかも知れません。
木を隠すなら森の中!というわけでpackageの更新をして、redirectに気づきづらくしましょう。
これでpackageの更新をしただけのように見えて、実はアプリケーションを破壊するPRの完成です。