ときどきの雑記帖 RE* (新南口)
offside できません
鉄骨飲料
復刻版を見かけた。
アミノ式とかoffsideも復活せんかのう…
VOS3
VOS3懐かしい。 大学で(ちょっとだけ)使ってた
C++
脆弱性
「Google Chrome 149」の脆弱性修正はなんと429件、できるだけ早めの更新を - 窓の杜
米国時間6月2日にリリースされたデスクトップ版「Google Chrome 149」では、 429件もの脆弱性が修正されているとのこと。公式リリースブログへの追記で明らかになった。
「Microsoft Edge 149」が公開 ~モダンで統一された新しいルック&フィールに - 窓の杜
脆弱性の修正は、全360件。すべて「Chromium」由来のもので、 うち18件は深刻度が4段階中最高の「Critical」と評価されている。
これも「えーあい効果」なんだろうか
C++
scala
Kyusyu
- Show HN: Kyushu - A self-hostable WASM sandbox for JavaScript workers | Hacker News
- A Self-Hostable Wasm Sandbox for JavaScript Workers | Kyushu
LSH
しかし、Microsoft Editは、ここであえて、文法ハイライト機能を独自にフルスクラッチで作る という選択を行った。作成された言語ハイライト機能は「LSH(Lightweight Syntax Highlighter)」という。 LSH独自の定義ファイルを専用コンパイラでバイトコードに変換して実行するものだ
へー。
Getting silly with C
- Getting silly with C, part and((int*)1)[-1] | Hacker News
- Getting silly with C, part &((int*)-8)[3] : r/programming
- Getting silly with C, part &((int*)-8)[3] - lcamtuf’s thing
#include <stdio.h>
void main() void;
void; {
puts("hello world");
}
#include <stdio.h>
#include <stdlib.h>
int main() {
goto *puts("Hello world"), puts("Goodbye world"), exit;
}
なんじゃこりゃ。と思って調べたらANSI以前のCには
pcc/cc/cxxcom/cgram.y at master · IanHarvey/pcc
| C_GOTO C_NAME ';' { gotolabel($2); goto rch; }
| C_GOTO '*' e ';' { ecomp(biop(GOTO, eve($3), NIL)); }
こういうのがあったっぽい。
gcc-2.95.1/gcc/c-parse.y
| GOTO identifier ';'
{ tree decl;
stmt_count++;
emit_line_note ($<filename>-1, $<lineno>0);
decl = lookup_label ($2);
if (decl != 0)
{
TREE_USED (decl) = 1;
expand_goto (decl);
}
}
| GOTO '*' expr ';'
{ if (pedantic)
pedwarn ("ANSI C forbids `goto *expr;'");
stmt_count++;
emit_line_note ($<filename>-1, $<lineno>0);
expand_computed_goto (convert (ptr_type_node, $3)); }
gccの&&を使ったラベルのアドレス取得との合わせ技以前にあったんすね。
ところで
part &((int*)-8)[3]はどういう意味としばらく悩んでしまったのだけど、
intの大きさが4だとすると
&((int*)-8)[3]の結果も4になりますわな。
んで
- Getting silly with C, part ~(~1«1) - lcamtuf’s thing
- Getting silly with C, part -5^-7 - lcamtuf’s thing
- Weekend projects: getting silly with C - lcamtuf’s thing
~(~1<<1) は3、
-5^-7 は2。と。
coreutils
findはここで、どちらの呼び出しか推測して切り替えてるhttps://t.co/Df35EU9AQv
— suchi (@suchi) June 3, 2026
sortはここでis_ntsort_invocation()だったらunsafeなCのntsortを呼び出し、でなければcoreutilのsort::uumainを呼び出してるhttps://t.co/vg6zig4Jdh
「その先」が知りたいんだがー。 で追いかけてみた
coreutils/src/main.rs at d01d8e7ddd793bf7d3a5e487f73909e886960598 · microsoft/coreutils
fn sort_uumain<T: Args>(args: T) -> i32 {
let mut args: Vec<OsString> = args.collect();
if nthelpers::is_ntsort_invocation(&args) {
for arg in &mut args {
arg.push("\0");
}
let ptrs: Vec<_> = args.iter().map(|v| v.as_encoded_bytes().as_ptr()).collect();
unsafe { ntsort_main(ptrs.len() as i32, ptrs.as_ptr()) }
} else {
sort::uumain(args.into_iter())
}
}
このnthelpers::is_ntsort_invocationはどういったものかというと
coreutils/src/nthelpers.rs at main · microsoft/coreutils
pub fn is_ntsort_invocation(args: &[OsString]) -> bool {
match sort_heuristic(args) {
Flavor::Ambiguous => default_sort_is_nt(),
Flavor::Dos => true,
Flavor::Gnu => false,
}
}
で、さらにsort_heuristicをみると
fn sort_heuristic(args: &[OsString]) -> Flavor {
for arg in args.iter().skip(1) {
let arg = arg.as_encoded_bytes();
let Some((&first, rest)) = arg.split_first() else {
continue;
};
if first == b'/' && !rest.is_empty() {
return Flavor::Dos;
}
if first == b'-' && !rest.is_empty() {
return Flavor::Gnu;
}
if first == b'+' && rest.first().is_some_and(u8::is_ascii_digit) {
return Flavor::Gnu;
}
}
Flavor::Ambiguous
}
ふむ。引数のいずれかが/で始まっていたら
Flavor::Dosを返す。かな。
findの方も
coreutils/src/main.rs at d01d8e7ddd793bf7d3a5e487f73909e886960598 · microsoft/coreutils
fn find_uumain<T: Args>(args: T) -> i32 {
if nthelpers::is_ntfind_invocation() {
ntfind::ntfind_main()
} else {
let strs: Vec<_> = findutils_collect_args(args);
let deps = findutils::find::StandardDependencies::new();
findutils::find::find_main(&strs, &deps)
}
}
coreutils/src/nthelpers.rs at main · microsoft/coreutils
pub fn is_ntfind_invocation() -> bool {
match find_heuristic() {
Flavor::Ambiguous => default_find_is_nt(),
Flavor::Dos => true,
Flavor::Gnu => false,
}
}
coreutils/src/nthelpers.rs at main · microsoft/coreutils
fn find_heuristic() -> Flavor {
let cmd_line = unsafe {
let p = GetCommandLineW();
let len = wcslen(p) as usize;
slice::from_raw_parts(p, len)
};
// Strip the program name
let rest: &[u16] = next_raw_find_token(cmd_line).map_or(&[], |(_, rest)| rest);
let Some((first, mut rest)) = next_raw_find_token(rest) else {
return Flavor::Ambiguous;
};
if is_dos_find_switch(first.raw) || first.raw.first().is_some_and(|&c| c == b'/' as u16) {
return Flavor::Dos;
}
if !first.starts_quoted {
return Flavor::Gnu;
}
if first.has_backslash_quote_escape {
return Flavor::Gnu;
}
let mut saw_rest_token = false;
let mut saw_dash_token = false;
while let Some((token, next)) = next_raw_find_token(rest) {
saw_rest_token = true;
if is_gnu_find_expression_token(token.raw) {
return Flavor::Gnu;
}
if token.raw.first().is_some_and(|&c| c == b'-' as u16) {
saw_dash_token = true;
}
rest = next;
}
if saw_rest_token && !saw_dash_token {
Flavor::Dos
} else {
Flavor::Ambiguous
}
}
coreutils/src/nthelpers.rs at main · microsoft/coreutils
const DOS_FIND_TOKENS: &[&[u8]] = &[b"/C", b"/I", b"/N", b"/OFF", b"/OFFLINE", b"/V"];
fn is_dos_find_switch(token: &[u16]) -> bool {
DOS_FIND_TOKENS
.iter()
.any(|&pattern| token_eq_insensitive(token, pattern))
}
ふむ
grep
ところでこのcoreutilsのgrepにはOnigurumaが使われているという話を聞いたので調べてみた
Cargo.lock:775:name = "onig"
Cargo.lock:783: "onig_sys",
Cargo.lock:787:name = "onig_sys"
Cargo.lock:1291: "onig",
Cargo.lock:1292: "onig_sys",
Cargo.toml:25:onig = { version = "~6.5.1", default-features = false }
Cargo.toml:26:onig_sys = { version = "*", default-features = false }
src/matcher.rs:8:use onig::{
src/matcher.rs:12:use onig_sys::{OnigEncCtype_ONIGENC_CTYPE_WORD, OnigEncodingUTF8};
src/matcher.rs:115: // SAFETY: This code uses OnigEncodingType such that it can support other types of encodings in the future.
src/matcher.rs:117: let mbc_to_code = OnigEncodingUTF8.mbc_to_code.unwrap_unchecked();
src/matcher.rs:118: let is_code_ctype = OnigEncodingUTF8.is_code_ctype.unwrap_unchecked();
src/matcher.rs:123: if is_code_ctype(cp, OnigEncCtype_ONIGENC_CTYPE_WORD) != 0 {
src/matcher.rs:129: let left_adjust = OnigEncodingUTF8.left_adjust_char_head.unwrap_unchecked();
src/matcher.rs:132: if is_code_ctype(cp, OnigEncCtype_ONIGENC_CTYPE_WORD) != 0 {
src/matcher.rs:278: // Unfortunately, the onig crate defines the OP2 flag without the
src/matcher.rs:321: EncodedBytes::from_parts(line, &raw mut OnigEncodingUTF8),
src/matcher.rs:335: EncodedBytes::from_parts(line, &raw mut OnigEncodingUTF8),
src/matcher.rs:347: EncodedBytes::from_parts(line, &raw mut OnigEncodingUTF8),
tests/test_grep.rs:120: // ERE backreference works on the Oniguruma path.
へー
WG 14
| N3901 | 2026/06/07 | Colomar, incompatible array parameters |
| N3900 | 2026/06/07 | Colomar, disallow function parameters of function type |
| N3895 | 2026/06/07 | Veldmeijer, Switch on Strings: Pointer-to-Character as Controlling Expression~ |
| N3884 | 2026/06/07 | Gustedt, Wording for “Local functions” |
awk
OTA
- Regression: awk -v RS=’\x00’ reads only the first record (re #119) · Issue #270 · onetrueawk/awk
-nan + 0 = +nanon riscv64 · Issue #269 · onetrueawk/awk
goawk
- Difference with Gawk in parsing floats · Issue #288 · benhoyt/goawk
- Fix hex float parsing with uppercase ‘P’ exponent by Copilot · Pull Request #289 · benhoyt/goawk
- Difference with Gawk in parsing floats · Issue #287 · benhoyt/goawk
gawk
次は6.0?
- warnings for CONVFMT/OFMT values without precision
- use after free with splitting of numeric $0
- fatal: internal error: file ./awk.h, line 2116: fixtype: expected Node_v
grep
- build: avoid GCC16 -Wconstant-logical-operand warning - grep.git - grep
- build: fix compilation error on Windows - grep.git - grep
e = jit_exec (pc, subject, line_end - subject,
search_offset, options);
- if (MATCH_INVALID_UTF || !bad_utf8_from_pcre2 (e))
+ if (MATCH_INVALID_UTF != 0 || !bad_utf8_from_pcre2 (e))
break;
idx_t valid_bytes = pcre2_get_startchar (pc->data);
ふむMATCH_INVALID_UTFの定義はたぶん定数で、
定数を条件式に置くと警告を発するようになった?
Hugo メモ
Release v0.163.0 · gohugoio/hugo
クロコさん
ソフトウェアで自分が思いつくことは世の中の誰かがすでに思いついていることがほとんどなので、クロコさん(Claude Code)にしばしば「これこれこういう機能を実現するためにこれこれこういう実装を試みている人がいるはずだから探してみて」とお願いすることがあります。そして実際に見つかります。
— 結城浩 / Hiroshi Yuki (@hyuki) June 1, 2026
銀河の歴史がまた一ページ
『銀英伝のラストはヒルダが帝国を上手く統治してユリアンが民主主義の苗を育むご都合ハピエンを匂わせていて嫌』という意見を見たが、どう足掻いても頼朝没後の『鎌倉殿の13人』レベルの内紛で人類社会がメタメタになる確率のほうが遥かに高いから安心して欲しい()。ミュラーとビッテンはコイツら。 pic.twitter.com/QHZTvRzapq
— 与力 (@zeppekiman) June 3, 2026
粛々と軍縮を進めるフェルナーに激昂する若手士官を抑えきれなくなったビッテンフェルトが「君側の奸を除く」と宣言して反乱を起こす。
— ふく局長 (@mkyokutyo) June 4, 2026
やむを得ず討伐に向かうミッターマイヤー。
アッテンボロー「ビッテンフェルトは、若者に命を呉れてやったノサ」
タバルザカ星域会戦で「バーラトの仇!バーラトの仇!」と叫びながら切り込む旧同盟軍陸戦隊が。。。😱
— ふく局長 (@mkyokutyo) June 4, 2026
この流れにちょっとウケた😄
rt
— Anguilla japonica (@Anguillaja70404) June 7, 2026
「銀英伝の一番くじください」
「転売防止のためにキャゼルヌ家の次女の名前を言ってください」
客「銀英伝の一番くじください」
— 千奈津ぅ (@syosin2) June 7, 2026
店員「転売対策のために銀英伝のセリフを一つ言ってください」
客「久々にワロタ」
自分が選ぶなら
「帝国軍に告ぐ。お前たちを叩きのめした人物はブルース・アッシュビーだ。 次に叩きのめす人物はブルース・アッシュビーだ。忘れずにいてもらおう」
声優:風間杜夫
これか
まったく、何だって俺ひとりがこんな苦労をせねばならんのだ!? どいつもこいつも、おれに頼りやがってすこしは自分たちで骨を折って 他人に楽をさせてやろうって気にならんのか!
これか(笑)