<p>์•…์˜์  ์ธ ๋ฐ์ดํ„ฐ๊ฐ€์žˆ๋Š” numpy๋กœ๋“œ ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด ๋ช…๋ น์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.</p>

์— ๋งŒ๋“  2019๋…„ 01์›” 16์ผ  ยท  32์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: numpy/numpy

์•…์˜์  ์ธ ๋ฐ์ดํ„ฐ๊ฐ€์žˆ๋Š” numpy๋กœ๋“œ ๊ธฐ๋Šฅ์€ ๊ณต๊ฒฉ์ด ์ธํ„ฐ๋„ท์—์„œ ์•…์˜์  ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ช…๋ น ์‹คํ–‰์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€๋กœ๋“œํ•˜๋ฉด ๋ช…๋ น์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ์ฝ”๋“œ ์˜ˆ :

import numpy
from numpy import __version__
print __version__
import os
import  pickle
class Test(object):
    def __init__(self):
        self.a = 1

    def __reduce__(self):
        return (os.system,('ls',))
tmpdaa = Test()
with open("a-file.pickle",'wb') as f:
    pickle.dump(tmpdaa,f)
numpy.load('a-file.pickle')

Numpy / Python ๋ฒ„์ „ ์ •๋ณด :

1.14.6

00 - Bug 15 - Discussion Documentation good first issue

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ๋กœ๋“œ ํ•  ๋•Œ ๊ฒฝ๊ณ ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ "๋„ˆ๋ฌด ๋Šฆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค". ์ €์žฅํ•  ๋•Œ ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์˜๊ตฌ์  ๊ฒฝ๊ณ  ๋งŒ ํ•ด๋‹น). ๋‚ด๊ฐ€ ๋” ๊ทธ๋Ÿฐ ๊ฒƒ์œผ๋กœ ๋ณ€๋ชจํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๊ณต๊ฐœ PR์ด์žˆ๋‹ค. ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ PR์— ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ๊ณง ์‚ฌ์šฉ ์ค‘๋‹จ์ฃผ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ „ํ™˜๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ, ๊ทธ๋ ‡๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (๊ทธ๋Ÿฌ๋‚˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ์„ ํƒํ•˜๋ฉด ๋” ๋นจ๋ผ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค;)). ์š”์ฒญ์ด ์ง€์—ฐ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์ ์ง€ ๋งŒ ์˜์‹ฌ์Šค๋Ÿฝ๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š๊ณ ๋Š” ์•Œ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  32 ๋Œ“๊ธ€

๋ฒ„์ „ <= 1.16.0, ์ž‘๋™ ํ•จ

์˜ˆ, ์ด๊ฒƒ์ด np.load(allow_pickle=True) ์ด ์ถ”๊ฐ€ ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๊ธฐ๋ณธ๊ฐ’ ์ธ False ํ•˜๊ณ  ์ž˜ ์ฝ์„ ์ˆ˜์žˆ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. "use allow_pickle="True" ์ด ํŒŒ์ผ์„ ์‹ ๋ขฐํ•˜์‹ญ์‹œ์˜ค ".

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋” ๋‚˜์€ ๊ธฐ๋ณธ๊ฐ’์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜๋ฏ€๋กœ ๋ถˆํ–‰ํžˆ๋„ ๋ชจ๋“  ๊ณผํ•™์ž๋“ค์ด ์‹คํ—˜์‹ค์—์„œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ  (๋˜๋Š” ๊ทธ๋ƒฅ ์ €์žฅ / ๋‹ค์‹œ๋กœ๋“œ)ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์•ฝ๊ฐ„ ์‹œ๋„๋Ÿฌ์šด ๊ฒฝ์šฐ์—๋„ ์ง€์› ์ค‘๋‹จ์„ ์ถ”์ง„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ allow_pickle ๋Š” 2015 ๋…„ 4 ์›”์— ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฏ€๋กœ numpy 1.10๋ถ€ํ„ฐ ์กด์žฌ ํ–ˆ์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1.17์„ ์‚ฌ์šฉ / ์ง€์›ํ•˜๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ์ „ํžˆ 1.10 (kwarg์„ ์ง€์›ํ•˜๊ฑฐ๋‚˜ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ณ ํ†ต์„ ์ œ๊ฑฐํ•จ)์„ ์ง€์›ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์˜์‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›€์ง์ž„์ด ๋” ํ˜„์‹ค์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” scipy๊ฐ€ ๋ฒ„์ „ 1์—์„œ ์—ฌ์ „ํžˆ 1.8์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ค๋ž˜ ์ง€์†๋  ๊ฒƒ ๊ฐ™์•„

์›ํ™œํ•œ ์ „ํ™˜์„ ์›ํ•˜๋ฉด ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋‚ ์งœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@Plazmaz ๋Š” ๋ฌผ๋ก  ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ์ค‘๋‹จํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด VisibleDeprecationWarning์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ๋ฒˆ์˜ ๋ฆด๋ฆฌ์Šค ํ›„์— ์ง€์› ์ค‘๋‹จํ•˜์‹ญ์‹œ์˜ค. ๋ฌธ์ œ๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ท€์ฐฎ๊ณ  ์ผ๋ถ€ ์ด์ „ ๋ฒ„์ „์—๋Š” kwarg๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ๋ฅผ ํ”ผํ•˜๊ณ  ๋‘˜ ๋‹ค ์ง€์›ํ•˜๋ ค๋ฉด if np.__version__ > ...: use kwarg else do not use kwarg ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์–ด์จŒ๋“  1.17์— ๋“ค์–ด๊ฐˆ ์ˆ˜์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ PR์ด ์—ด๋ ค ์žˆ๋‹ค๊ณ  ๋Š๋ผ์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ถˆํ‰ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์ผ ๋ง๋ฆฌ์ŠคํŠธ๋ฅผ ํ•‘ (ping) ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, Fedora numpy RPM ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. ๋ฐฐํฌํŒ ํŒจํ‚ค์ง•์—์„œ ์ด๊ฒƒ์„ ์™„ํ™”ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅธ๋‹ค. ์šฐ๋ ค ์ˆ˜์ค€์— ๋”ฐ๋ผ ์กฐ๋งŒ๊ฐ„ ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ ํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ 1.17์— ํ™•์‹คํžˆ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทน๋„๋กœ ์—ผ๋ คํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฑ ํฌํŒ… ๋˜๋Š” ๋” ๋นจ๋ฆฌ ์ด๋™ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์˜ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๋‹ค์šด ์ŠคํŠธ๋ฆผ์ด ์ด์— ์˜์กดํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด ๋…ธ๋ ฅ ํ•˜๊ณ ์žˆ๋‹ค.

cc @jeanqasaur re : ๋ณด์•ˆ / ์ทจ์•ฝ์„ฑ ์ „๋ฌธ์„ฑ

์•ˆ๋…•ํ•˜์„ธ์š”, Fedora numpy RPM ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. ๋ฐฐํฌํŒ ํŒจํ‚ค์ง•์—์„œ ์ด๊ฒƒ์„ ์™„ํ™”ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@limburgher : ํŽ˜๋„๋ผ๋Š” ํŒŒ์ด์ฌ์— ๋‚ด์žฅ ๋œ ๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋ฌด์—‡์„ํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ์™„ํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์ธ์ง€๋Š” ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋Œ€ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ด๊ฒƒ์„ ์ทจ์•ฝ์ ์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œํ™”๋˜๊ณ  ์„ค๊ณ„๋œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๊ทœ์น™์€ CVE ๋ฒˆํ˜ธ๊ฐ€ ํ• ๋‹น๋˜๋ฉด ๋” ์ด์ƒ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฐฐํฌํŒ์€ ๊ณ ๊ฐ์—๊ฒŒ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Œ์„ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์–ธ๊ฐ€ ๋ฅผ ์‹œ๋„ํ•ด์•ผ

save ๋ฐ load ๋™์•ˆ ํŠน์ • ํŒŒ์ผ์ด ํ”ผํด์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ? ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ allow_pickle=False ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. save ๋˜๋Š” load ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์ •ํ™•ํžˆ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ง€์› ์ค‘๋‹จ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœํ–‰ํ•˜๋Š” ์ค‘๊ฐ„ ๊ธฐ๊ฐ„์„ ๋‘์‹ญ์‹œ์˜ค. ํ”ผํด์„ ์‚ฌ์šฉํ•˜๊ณ  allow_pickle ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@ eric-wieser stdlib ํ”ผํด๊ณผ์˜ ์ฐจ์ด์ ์€ load / save ์‹ค์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ”ผํด ์‚ฌ์šฉ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์˜ˆ : ๊ธฐ๋ณธ ์œ ํ˜•์˜ ๊ฐ„๋‹จํ•œ ๋ฐฐ์—ด). pickle์€ ๊ฐ์ฒด ๋ฐฐ์—ด์ด๋‚˜ IIRC ํŠน์ • ๋ณต์žกํ•œ dtype๊ณผ ๊ฐ™์€ ๋” ์ด๊ตญ์ ์ธ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ ์•ˆ์ „ ์ผ€์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋ฌธ์„œ๋ฅผ ์ถฉ๋ถ„ํžˆ ์ž์„ธํžˆ ์ฝ์ง€ ์•Š์œผ๋ฉด ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ผ€์ด์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋†“์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  "์•ˆ์ „ ๋ชจ๋“œ"์™€ "์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ชจ๋“œ"๊ฐ€ ๋ชจ๋‘์žˆ๋Š” ๊ฒฝ์šฐ "์•ˆ์ „ ๋ชจ๋“œ"๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. stdlib pickle OTOH์˜ ๊ฒฝ์šฐ ํ•ญ์ƒ 100 % ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ๊ฐ’์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ ๋ฌธ์„œํ™” ๋œ ์˜๋„์  ์ธ ๊ธฐ๋Šฅ์ด๋ผ๋ฉด ํŠนํžˆ ์•ˆ์ „์ด ๊ธฐ๋ณธ๊ฐ’ ์ธ ๊ฒฝ์šฐ ์–‘์‹ฌ์ ์œผ๋กœ BZ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ํŒŒ์ด์ฌ์˜ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณผ๊ฒŒ.

์‚ฌ์–‘์„ ์‚ดํŽด๋ณด๋ฉด ๊ทธ ์ ์—์„œ ์—…์ŠคํŠธ๋ฆผ์—์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

CVE์— ๋Œ€ํ•ด ์ด์˜๊ฐ€ ์ œ๊ธฐ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CVE๋Š” ๋Œ€์ฒด๋กœ ๊ฐ€์งœ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. numpy.load ๊ฐ€ ์ž„์˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ๊ณ  ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ์ง๋ ฌํ™” ๋œ Python ๊ฐ์ฒด ๋ฐฐ์—ด์„๋กœ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š”์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์— allow_pickle=False ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๊ฐ์ฒด ๋ฐฐ์—ด๋กœ๋“œ๋ฅผ ๊ธˆ์ง€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์ด ๋ช…์‹œ ์ ์œผ๋กœ ์š”์ฒญ๋˜์—ˆ์„ ๋•Œ๋งŒ ๊ฐ์ฒด ๋ฐฐ์—ด์„๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์•˜์„ ๊ฒƒ์ด์ง€๋งŒ ์—ญ์‚ฌ์  ์ด์œ  ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ „ํ™˜์€ ์ด์ „์—๋„ ์ œ์•ˆ๋˜์—ˆ์œผ๋ฉฐ, ์œ„์˜ ๋…ผ์˜๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ํ†ต์ œ ํ•  ์ˆ˜ ์—†๊ฒŒ ๊นจ์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Python ํ”ผํด ๋ง๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ numpy.load ๋ถ€์ฃผ์˜ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์šด ์ŠคํŠธ๋ฆผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ทจ์•ฝ์„ฑ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

numpy.load ๊ฐ€ ์ž„์˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ๊ณ  ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ์ง๋ ฌํ™” ๋œ Python ๊ฐ์ฒด ๋ฐฐ์—ด์„๋กœ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฌธ์„œํ™”๋˜์—ˆ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ช‡ ๋…„ ๋™์•ˆ numpy๋ฅผ ์‚ฌ์šฉํ•ด ์™”์ง€๋งŒ numpy.save / numpy.load ์˜ ๋นˆ๋ฒˆํ•œ ์‚ฌ์šฉ์ž๋Š” ์•„๋‹ˆ์ง€๋งŒ numpy.load ์— ๋Œ€ํ•ด ์ „ํ˜€ ๋ถ„๋ช…ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. pickle ์™€ ๋™์ผํ•œ ์ทจ์•ฝ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋‚˜๋Š” numpy.load ๊ฐ€ pickle ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค (๋‚˜๋Š” numpy-native ๋ฐฐ์—ด๋งŒ์„ ์‚ฌ์šฉํ•˜๊ณ  @njsmith๊ฐ€ ์–ธ๊ธ‰ ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ์ƒ๊ฐ์„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค).

pickle ์ด ์ทจ์•ฝํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์œผ๋ฉฐ, ๋ฌธ์„œ์—๋Š” ์ƒ๋‹จ์— ํฐ ๋นจ๊ฐ„์ƒ‰ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๊ณ  : pickle ๋ชจ๋“ˆ์€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์•…์˜์ ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ธ์ฆ๋˜์ง€ ์•Š์€ ์†Œ์Šค์—์„œ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ ˆ๋Œ€๋กœ ํ”ผํดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ด์— ๋น„ํ•ด numpy.load ์˜ ๋ฌธ์„œ ๋Š” allow_pickle ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์—์„œ ์ „์ฒด ๋ณด์•ˆ ์ธก๋ฉด

allow_pickle : _bool, optional_
npy ํŒŒ์ผ์— ์ €์žฅ๋œ ํ”ผํด ๋œ ๊ฐ์ฒด ๋ฐฐ์—ด์„๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”ผํด์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ์—๋Š” ํ”ผํด ๋œ ๋ฐ์ดํ„ฐ๋ฅผ๋กœ๋“œํ•˜๋ฉด ์ž„์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณด์•ˆ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํ”ผํด์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ๊ฐ์ฒด ๋ฐฐ์—ด๋กœ๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’ : True

์ ์–ด๋„ allow_pickle=False ์ด ๊ธฐ๋ณธ๊ฐ’์ด ๋  ๋•Œ๊นŒ์ง€ numpy.load ์˜ ๋ฌธ์„œ์— Big Red Warning์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์‹ซ์–ดํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ€ํ™”๊ฐ€๋ณด๊ณ  ๋  ๋•Œ๊นŒ์ง€ numpy.load ํ•˜๋‚˜์˜ ๋งˆ์Œํ•œ๋‹ค๋Š” ์ ์—์„œ ๊ฐ™์€ ๋ถ‰์€ ๊นƒ๋ฐœ์„ ์ œ๊ธฐํ•œ๋‹ค pickle.load ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

numpy.load ๋Œ€ํ•œ ๋ฌธ์„œ PR ํ™˜์˜

์ด์ œ ๋ฌธ์„œ ์— ํ”ผํด์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๊ทœ์น™์€ CVE ๋ฒˆํ˜ธ๊ฐ€ ํ• ๋‹น๋˜๋ฉด ๋” ์ด์ƒ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฐฐํฌํŒ์€ ๊ณ ๊ฐ์—๊ฒŒ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Œ์„ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด _ ๋ฌด์–ธ๊ฐ€ _ ์‹œ๋„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ, ํšŒ์‚ฌ์™€ ์šด์˜์ง„์€ ์ง€์†์ ์œผ๋กœ ๋„˜์ณ๋‚˜๋Š” ์ทจ์•ฝ์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ,์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ๋Š” ๋‰˜์•™์Šค๋ฅผ ์ „๋‹ฌํ•  ์—ฌ์ง€๊ฐ€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹ค.

@njsmith ๋Š” ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . numpy.load ๊ธฐ๋ณธ๊ฐ’์„ allow_pickle ~ False ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์™„์ „ํžˆ ์–ด๋ฆฌ์„์€ ์ƒ๊ฐ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ์œ„ํ—˜์€ allow_pickle์„ ๋ช…์‹œ ์ ์œผ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๊ฐ€ ์ค‘๋‹จ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ์ตœ์ข… ์‚ฌ์šฉ์ž ์•„๋‹ˆ์—์š” ํ”„๋กœ์ ํŠธ ์šฐ๋ฆฌ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ - ๋‚ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋‹ค์šด ์ŠคํŠธ๋ฆผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฑฑ์ • mylib.load ๋žฉ์ด np.load . ๊ฐ์ฒด ๋ฐฐ์—ด์„๋กœ๋“œํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ๋“ค์€ ๋ฒ„๋ ค์ง„ ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ์œผ๋ฉฐ ์˜ˆ์ „ ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด ๋ฐฐ์—ด์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ธ์งˆ๋กœ ์žกํ˜€ ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ•˜๊ณ ์ด๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•ด numpy๋ฅผ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋“ค์€ ์ด์ „ ๋™์ž‘์„ ์žฌ๊ฐœํ•˜๊ธฐ ์œ„ํ•ด allow_pickle=True ์„ค์ •์„ ๋‹ค์‹œ ๋ฆด๋ฆฌ์Šคํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์šด ์ŠคํŠธ๋ฆผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด๊ฒƒ์ด ๊ทธ๋“ค์ด ์‹ ๊ฒฝ ์“ฐ๋Š” ๊ณต๊ฒฉ ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฆด๋ฆฌ์Šค ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋“ค์€ ์ž์‹ ์˜ API์— allow_pickle=False ๋ฅผ ๋…ธ์ถœํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ๋‹ค์šด ์ŠคํŠธ๋ฆผ์œผ๋กœ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์„ ํ˜ธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • np.save ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด ๋ฐฐ์—ด์„ ์ €์žฅํ•˜๋Š” ๋™์•ˆ ๋งˆ์ง€๋ง‰์— ์žฅ๊ธฐ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋”์ฐํ•œ ๊ฒฝํ—˜์ž…๋‹ˆ๋‹ค.
  • np.load ์˜ ๊ธฐ๋ณธ๊ฐ’์„ None ํ•ฉ๋‹ˆ๋‹ค. True ๋˜๋Š” False ๋ช…์‹œ ์ ์œผ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ณด์•ˆ ( False )๊ณผ ๊ฐ์ฒด ์ค‘์—์„œ ์„ ํƒํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ์œ„ํ—˜์„ ์„ค๋ช…ํ•˜๋Š” UserWarning ๋ฅผ ๋‚ด ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ฐฐ์—ด ์ง€์› ( True ). ์ด ๊ฒฝ๊ณ ๋ฅผ ๋‚ด ๋ณด๋‚ธ ํ›„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์ธ์‹ ๋ถ€์กฑ์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์„ ํƒ ๋ชจ๋‘ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์˜ณ์€ ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ ๊ฒฝ๊ณ ์—†์ด ๊ธฐ๋ณธ๊ฐ’์— ๋Œ€ํ•ด ๊ฐ‘์ž๊ธฐ ๋งˆ์Œ์„ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ eric-wieser ์Šคํฌ๋ฆฝํŠธ ์ถฉ๋Œ์˜ ๊ณ ํ†ต์— ๋Œ€ํ•œ ์ข‹์€ ์ง€์ . ๋‚˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ UserWarning ๋ฅผ ์ œ๊ณต ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์žฅ๊ธฐ์ ์œผ๋กœ load ์—์„œ ๋ฌด์—‡์„ํ•˜๊ณ  ์‹ถ์€์ง€์ž…๋‹ˆ๋‹ค. ์–ด๋ ˆ์ด๊ฐ€ ์•ˆ์ „ ํ•  ๋•Œ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ kwarg (๊ฒฝ๊ณ ๋ฅผ ๋ฌด์Œ)๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์—์„œ ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ์ž ๊ธ€ ์œ„ํ—˜์ด ์—†๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ ... OTOH, ๊ฒฝ๊ณ ๊ฐ€ "์•ˆ์ „ํ•˜์ง€ ์•Š์€"๋กœ๋“œ์—๋งŒ ํ‘œ์‹œ๋˜๋ฉด ๋„ˆ๋ฌด ๋Šฆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ „ํ™˜ ๊ธฐ๊ฐ„์„ ์กฐ๊ธˆ ๋” ๊ธธ๊ฒŒ ๋งŒ๋“œ๋Š” ํŽธ์ด ์•ฝ๊ฐ„ ์„ ํ˜ธ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

OTOH, ๊ฒฝ๊ณ ๊ฐ€ "์•ˆ์ „ํ•˜์ง€ ์•Š์€"๋ถ€ํ•˜์—๋งŒ ํ‘œ์‹œ๋˜๋ฉด ๋„ˆ๋ฌด ๋Šฆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋Š ํ•œ ์ชฝ:

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ / ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๊ณ  ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ํ•˜๋Š” ์ผ์€ ์ด๋ฏธ ๋„ˆ๋ฌด ๋Šฆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ / ์Šคํฌ๋ฆฝํŠธ๋Š” ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์•ˆ์ „ํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ์ค‘์— ๊ฒฝ๊ณ ๋ฅผ ํ™•์ธํ•˜๊ณ  ์›ํ•˜๋Š” ๋™์ž‘์— ๋Œ€ํ•ด ์ •๋ณด์— ์ž…๊ฐ ํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ฐฐ์—ด์ด ์•ˆ์ „ํ•˜๋”๋ผ๋„ (๊ทธ๋ฆฌ๊ณ ๋กœ๋“œํ•˜๊ธฐ ์ „์— -Werror ํ•ด๋‹นํ•˜๋Š” python์ด์žˆ๋Š” ๊ฒฝ์šฐ) ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ์ €๋Š” ํ™•์‹คํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋™์˜ํ•˜์ง€๋งŒ ๋ฐฉ๋Œ€ํ•œ ์ˆ˜์˜ ์งง์€ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ์•ฝ๊ฐ„ ์„ฑ๊ฐ€ ์‹œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

np.load ์˜ ๊ธฐ๋ณธ๊ฐ’์„ None ํ•ฉ๋‹ˆ๋‹ค. True ๋˜๋Š” False ๋ช…์‹œ ์ ์œผ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ณด์•ˆ ( False )๊ณผ ๊ฐœ์ฒด ์ค‘์—์„œ ์„ ํƒํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ์œ„ํ—˜์„ ์„ค๋ช…ํ•˜๋Š” UserWarning ๋ฅผ ๋‚ด ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ฐฐ์—ด ์ง€์› ( True ). ์ด ๊ฒฝ๊ณ ๋ฅผ ๋‚ด ๋ณด๋‚ธ ํ›„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์ธ์‹ ๋ถ€์กฑ์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์„ ํƒ ๋ชจ๋‘ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์˜ณ์€ ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ ๊ฒฝ๊ณ ์—†์ด ๊ธฐ๋ณธ๊ฐ’์— ๋Œ€ํ•ด ๊ฐ‘์ž๊ธฐ ๋งˆ์Œ์„ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋งค์šฐ ์„ฑ๊ฐ€์‹  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ (๋‚ด ์ƒ๊ฐ์—) ๊ฐ์ฒด ๋ฐฐ์—ด์„ ์ €์žฅ /๋กœ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฒฝ๊ณ ๋ฅผ ๋†“์นœ ๊ฒฝ์šฐ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋Š” (๊ฒฐ๊ตญ)๋กœ๋“œ ํ•  ๋•Œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ถฉ๋Œํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋Š” ์—ฌ์ „ํžˆ ๋””์Šคํฌ์— ์•ˆ์ „ํ•˜๋ฉฐ allow_pickle ํ”Œ๋ž˜๊ทธ๋กœ ์žฌ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € ์•ˆ์ „ํ•˜๊ฒŒ๋กœ๋“œ๋ฅผ ์‹œ๋„ํ•˜๊ณ  ๊ฐ์ฒด ๋ฐฐ์—ด๋กœ ์ธํ•ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ์—๋งŒ ์™ธ์น˜๋Š” ๊ฒƒ์€ numpy์˜ ์ฑ…์ž„์„ ๋„˜์–ด์„œ์ž…๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„์˜ (๊ฐ๊ด€์ ์ด์ง€ ์•Š์€) ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ œ๊ฑฐํ•˜์ง€๋งŒ ์ „์ฒด ๋ณด์•ˆ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐ€์‹œ์„ฑ์„ ๊ฐ์†Œ์‹œํ‚ฌ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ๋„ "์‚ฌ์šฉ์ž๊ฐ€์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ์•ผํ•œ๋‹ค"๊ณ  "์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถˆํŽธ์„ ๋ผ์ณ์„œ๋Š” ์•ˆ๋œ๋‹ค"๋Š” ๊ฒƒ์€ ์•ฝ๊ฐ„ ๋ชจ์ˆœ์ ์ธ ๋…ธ๋ ฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

* Change the default in `np.load` to `None`. Detect the user not passing in `True` or `False` explicitly, and emit a `UserWarning` explaining the dangers, asking them to choose between security (`False`) and object array support (`True`). Default to the status quo after emitting this warning. It's my understanding that the problem here is lack of awareness. Neither choice is correct in all cases, so I don't think we should suddenly change our minds about the default without warning.

์ด ํŒจ์น˜๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

* Change the default in `np.load` to `None`. Detect the user not passing in `True` or `False` explicitly, and emit a `UserWarning` explaining the dangers, asking them to choose between security (`False`) and object array support (`True`). Default to the status quo after emitting this warning. It's my understanding that the problem here is lack of awareness. Neither choice is correct in all cases, so I don't think we should suddenly change our minds about the default without warning.

์ด ํŒจ์น˜๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

--- a/numpy/lib/npyio.py
+++ b/numpy/lib/npyio.py
@@ -265,7 +265,7 @@ class NpzFile(object):
         return self.files.__contains__(key)


-def load(file, mmap_mode=None, allow_pickle=True, fix_imports=True,
+def load(file, mmap_mode=None, allow_pickle=None, fix_imports=True,
          encoding='ASCII'):
     """
     Load arrays or pickled objects from ``.npy``, ``.npz`` or pickled files.
@@ -367,6 +367,16 @@ def load(file, mmap_mode=None, allow_pic
     memmap([4, 5, 6])

     """
+
+    if allow_pickle is None:
+        UserWarning("""
+        numpy.load() run without explicit setting allow_pickle option.
+        If you are not completely certain about security of the pickled
+        data, you are strongly encouraged to set allow_pickle to False,
+        otherwise you can set it to True.
+        """)
+        allow_pickle = False
+
     own_fid = False
     if isinstance(file, basestring):
         fid = open(file, "rb")

๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ๋กœ๋“œ ํ•  ๋•Œ ๊ฒฝ๊ณ ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ "๋„ˆ๋ฌด ๋Šฆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค". ์ €์žฅํ•  ๋•Œ ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์˜๊ตฌ์  ๊ฒฝ๊ณ  ๋งŒ ํ•ด๋‹น). ๋‚ด๊ฐ€ ๋” ๊ทธ๋Ÿฐ ๊ฒƒ์œผ๋กœ ๋ณ€๋ชจํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๊ณต๊ฐœ PR์ด์žˆ๋‹ค. ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ PR์— ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.
์–ด์จŒ๋“  ๊ณง ์‚ฌ์šฉ ์ค‘๋‹จ์ฃผ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ „ํ™˜๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ, ๊ทธ๋ ‡๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (๊ทธ๋Ÿฌ๋‚˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ์„ ํƒํ•˜๋ฉด ๋” ๋นจ๋ผ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค;)). ์š”์ฒญ์ด ์ง€์—ฐ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์ ์ง€ ๋งŒ ์˜์‹ฌ์Šค๋Ÿฝ๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š๊ณ ๋Š” ์•Œ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” https://nvd.nist.gov/vuln/detail/CVE-2019-6446์— ์–ธ๊ธ‰๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ nexus iq๊ฐ€ ์—ฌ์ „ํžˆ ์ทจ์•ฝํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผํ•˜๋ฏ€๋กœ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์•„ ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @ Manjunath07

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰