ときどきの雑記帖 RE* (新南口)
Fragile
check
チェックとかチェックマークとかいうのあるじゃないですか。 こういうやつ。 ✔️ ✔ ☑️ ☑ ✅ ✅
で、これを「レ点」と呼ぶ人に某社内で遭遇して(それも複数) ちょっとびっくりしたんですが、 世の中的にもそれなりにいらっしゃる?
- ✅ チェックマーク 絵文字 (Check Mark Emoji) | Let’s EMOJI
- チェックマーク - Wikipedia
- 漢文訓読 - Wikipedia
- レ点(チェックマーク)を入力するには【Word・Excel・PowerPoint共通】
- Word:レ点(チェックマーク)を入力するには(レ点・□にレ点)- 教えて!HELPDESK
ゲッターロボ
— 松根 ジュンイチ (@jride_tweet) September 16, 2021
組み合わせがあと三つあって…というのは聞いたことがあったけど、これが出典だったのか!
三つのメカが六つの組み合わせで合体するのは アルベガスがやってますな (ゲッターロボほど組み合わせごとの形態が変わらないので面白みがないと言えばないけど)。
lala-z
誰が見るんだろってそりゃあlala様信者のこの私よ鉄郎… fjのlala様と言えばインターネッツ八百万の神のうちの一柱… なお動画は倍速再生おすすめ…https://t.co/jV5BudGI2E
— メーテル (@_maeter) September 5, 2021
SCSI、ちゃんと何ピンか言わないと駄目じゃないの鉄郎…D-Sub25ピン、フルピッチ50ピン、ハーフピッチ50ピン、高密度68ピン、ハーフピッチ50ピンにもピン並びに違いがあって刺さらなかったりするし、 (早口)https://t.co/U9kreaZTiS
— メーテル (@_maeter) September 11, 2021
「fjのlala」とかSCSIのコネクタ形状とか このメーテルさんいったい何者なんだ…
gawk -v
さらにこの話題(-vオプションの話) を引っ張るのじゃよ。
awk の -v オプションに潜む罠 ~任意の値を渡す時はエスケープ処理が必要です!~ - Qiita
「リテラルの \ として扱われる」に解釈の幅があるような気がしますが、この点に関しては gawk は POSIX に準拠してないということでしょうか? 単に後続の " を食ってシンタックスエラーにならない(場合によっては脆弱性にはならない)という意味なだけかもしれません。
について
assignment
The characters following the <equals-sign> shall be interpreted as if they appeared in the awk program preceded and followed by a double-quote ( ‘"’) character, as a STRING token (see Grammar), except that if the last character is an unescaped <backslash>, it shall be interpreted as a literal <backslash> rather than as the first character of the sequence “"”.
の解釈の問題じゃなかろうかということを書こうと思っていたのだけど、 改めて確認してみると
kbk@toybox4:/mnt/c/Users/kbk$ gawk -v bs='a\' 'BEGIN{print bs "" }'
a\
…あれ?記事と結果が違う。
ああそういえばこの環境のgawkはバージョンが古かったような。
kbk@toybox4:/mnt/c/Users/kbk$ gawk --version
GNU Awk 4.1.4, API: 1.1 (GNU MPFR 4.0.1, GNU MP 6.1.2)
Copyright (C) 1989, 1991-2016 Free Software Foundation.
そして記事中で使用していたのは(おそらく)5.1.0だから、 そこまでのどこかで変更が入っていると。
細かいところはすっ飛ばして、問題の箇所は 以前説明したときにもでてきたこの辺で
if (c == '\\') {
c = parse_escape(&pf);
if (c < 0) {
if (do_lint)
lintwarn(_("backslash string continuation is not portable"));
if ((flags & ELIDE_BACK_NL) != 0)
continue;
c = '\\';
}
*ptm++ = c;
} else
*ptm++ = c;
4.1.4だとこう。
if (c == '\\') {
c = parse_escape(&pf);
if (c < 0) {
if (do_lint)
lintwarn(_("backslash at end of string"));
c = '\\';
}
*ptm++ = c;
} else
*ptm++ = c;
ということで、(4.1.4で)実行時に--lint
をつけると
kbk@toybox4:/mnt/c/Users/kbk$ gawk --lint -v bs='a\' 'BEGIN{print bs "" }'
gawk: warning: backslash at end of string
a\
この変更がいつ入ったか、なのだけど このファイル(node.c)に対する変更を gawk.git - gawk で見てもなんかよくわからんということで ChangeLogを見ていくと
2018-07-31 Arnold D. Robbins <arnold@skeeve.com>
Handle newlines in -v and fix \-<newline>. Thanks to
Samy Mahmoudi <samy.mahmoudi@gmail.com> for the report.
* awk.h [ELIDE_BACK_NL]: New constant.
* awkgram.y (yylex): Disallow any physical newlines in a string
even if escaped, in POSIX mode.
* main.c (arg_assign): In POSIX mode disallow physical newline
in a -v value. Otherwise call make_str_node() with ELIDE_BACK_NL.
* node.c (make_str_node): Handle ELIDE_BACK_NL.
これかな? ここから日付を手掛かりにコミットを追いかけると
diff --git a/node.c b/node.c
index 54ea6627..4ad41ef1 100644
--- a/node.c
+++ b/node.c
@@ -451,6 +451,8 @@ make_str_node(const char *s, size_t len, int flags)
if (c < 0) {
if (do_lint)
lintwarn(_("backslash at end of string"));
+ if ((flags & ELIDE_BACK_NL) != 0)
+ continue;
c = '\\';
}
*ptm++ = c;
(行頭の空白数を調整)
これですね。
Fix handling of physical newlines in -v arguments and related improvemnts.
とあるので、末尾のバックスラッシュの扱いの変化は意図しないものだったような 気がしないでもない。
続く?