πŸ”

배포 μ „ 톡합 JS 검증

μ‹€μ œ λ Œλ”λ§ β†’ JS μΆ”μΆœ β†’ Node.js 검사 + 버그 νŒ¨ν„΄ μŠ€μΊ” β†’ 영ꡬ μ €μž₯
β–Ά 검사 싀행← μ–΄λ“œλ―Ό

🚨 배포 쀑지 - 문제 발견

2026-07-12 21:56:07 | 버전 557329c89c

πŸ“„ νŽ˜μ΄μ§€λ³„ JS 검사

νŽ˜μ΄μ§€κ²°κ³ΌJSμ€„μˆ˜μ˜€λ₯˜
admin (/admin)βœ… PASS4633쀄-
brands (/brands)⚠️0μ€„ν…œν”Œλ¦Ώ μΆ”μΆœ 였λ₯˜(λ¬΄μ‹œ κ°€λŠ₯): unterminated triple-quoted string literal (detected at line 2) (, line 1)
blog (/blog)⚠️0μ€„ν…œν”Œλ¦Ώ μΆ”μΆœ 였λ₯˜(λ¬΄μ‹œ κ°€λŠ₯): unterminated triple-quoted string literal (detected at line 2) (, line 1)
런처 (/launcher)βœ… PASS999쀄-
경비관리 (/expenses)βœ… PASS1745쀄-

πŸ” 버그 νŒ¨ν„΄ μŠ€μΊ” (63건)

μ‹¬κ°λ„νŒ¨ν„΄μœ„μΉ˜μ½”λ“œμˆ˜μ •λ°©λ²•
πŸ”΄ μœ„ν—˜onclick= 속성L3751el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L3784el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16015el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16016el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16017el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16018el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16019el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16033el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16044{'el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16277
el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16302el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16330
μ €μž₯
el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16343el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16827el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16832el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16950
πŸ’Ό μ „λ¬Έμ μœΌλ‘œ
el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16951
πŸ™ 사과 쀑심
el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16957el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16966el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16980el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L16998
el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L17003
el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L17008
el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L17013
el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L17018
el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L21309el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L21315el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L21316el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L21317el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜onclick= 속성L21318el.onclick = function(){} 별도 λΆ€μ°©
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L2770end = src.find('"""\n', m.end())bytes 5c6e β†’ 5c5c6e μˆ˜μ • ν•„μš”
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L2783p = data.find(b"\x5c\x6e", idx) # \n λ°”μ΄νŠΈ μ‹œν€€μŠ€bytes 5c6e β†’ 5c5c6e μˆ˜μ • ν•„μš”
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L2793lineno = data[:p].count(b"\n") + 1bytes 5c6e β†’ 5c5c6e μˆ˜μ • ν•„μš”
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L2815# Python의 html="""...""" μ•ˆμ—μ„œ \n을 직접 μ“°λ©΄ Python이 μ‹€μ œ κ°œν–‰μœΌλ‘œ λ³€ν™˜ν•΄bytes 5c6e β†’ 5c5c6e μˆ˜μ • ν•„μš”
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L2816# JS SyntaxErrorκ°€ λ°œμƒν•©λ‹ˆλ‹€. json.dumps()λ₯Ό μ“°λ©΄ \n, ", \ 등을bytes 5c6e β†’ 5c5c6e μˆ˜μ • ν•„μš”
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L2820# _admin_msgs = {"foo": "쀄1\n쀄2"} # Pythonμ—μ„œ μžμ—°μŠ€λŸ½κ²Œ μž‘μ„±bytes 5c6e β†’ 5c5c6e μˆ˜μ • ν•„μš”
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L2823# # JS: var _M = __ADMIN_MSGS__; β†’ var _M = {"foo":"쀄1\n쀄2"};bytes 5c6e β†’ 5c5c6e μˆ˜μ • ν•„μš”
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L2922ex_fn = src.find("\ndef expenses_page():", ex_route)bytes 5c6e β†’ 5c5c6e μˆ˜μ • ν•„μš”
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L2941js_code = "\n".join(scripts)bytes 5c6e β†’ 5c5c6e μˆ˜μ • ν•„μš”
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L2950if c == "\n": in_lc = Falsebytes 5c6e β†’ 5c5c6e μˆ˜μ • ν•„μš”
πŸ”΄ μœ„ν—˜\n μ‹€μ œ κ°œν–‰ λ Œλ”L21494svgStr += ' → " 둜 λ Œλ” → innerHTML JS λŠκΉ€