Techioz Blog

zsteg 使用時のスタック レベルが深すぎる (SystemStackError)

概要

私は zsteg を使いたいので、ruby のインストール方法についての教えに従い、ステップバイステップでインストールします。しかし、zsteg を実行すると何か問題が発生します。

@-VirtualBox:~$ zsteg concat_v.png 
/home/weis/.rvm/gems/ruby-3.0.0/gems/zpng-0.4.5/lib/zpng/scan_line.rb:369:in prev_scanline_byte': stack level too deep (SystemStackError)
    from /home/weis/.rvm/gems/ruby-3.0.0/gems/zpng-0.4.5/lib/zpng/scan_line.rb:319:in block in decoded_bytes'
    from /home/weis/.rvm/gems/ruby-3.0.0/gems/zpng-0.4.5/lib/zpng/scan_line.rb:318:in upto'
    from /home/weis/.rvm/gems/ruby-3.0.0/gems/zpng-0.4.5/lib/zpng/scan_line.rb:318:in decoded_bytes'
    from /home/weis/.rvm/gems/ruby-3.0.0/gems/zpng-0.4.5/lib/zpng/scan_line/mixins.rb:17:in prev_scanline_byte'
    from /home/weis/.rvm/gems/ruby-3.0.0/gems/zpng-0.4.5/lib/zpng/scan_line.rb:377:in prev_scanline_byte'
    from /home/weis/.rvm/gems/ruby-3.0.0/gems/zpng-0.4.5/lib/zpng/scan_line.rb:319:in block in decoded_bytes'
    from /home/weis/.rvm/gems/ruby-3.0.0/gems/zpng-0.4.5/lib/zpng/scan_line.rb:318:in upto'
    from /home/weis/.rvm/gems/ruby-3.0.0/gems/zpng-0.4.5/lib/zpng/scan_line.rb:318:in decoded_bytes'
     ... 10225 levels...
    from /home/weis/.rvm/gems/ruby-3.0.0/gems/zsteg-0.2.13/lib/zsteg.rb:26:in run'
    from /home/weis/.rvm/gems/ruby-3.0.0/gems/zsteg-0.2.13/bin/zsteg:8:in <top (required)>'
    from /home/weis/.rvm/gems/ruby-3.0.0/bin/zsteg:23:in load'
    from /home/weis/.rvm/gems/ruby-3.0.0/bin/zsteg:23:in `<main>'

私は zsteg を使いたいので、ruby のインストール方法についての教えに従い、ステップバイステップでインストールします。しかし、zsteg を実行すると何か問題が発生します。

解決策

「スタック レベルが深すぎます」エラーは、次のように条件を制限せずにメソッドが再帰的に呼び出されていることを意味します。

def bad_method
  bad_method # uh-oh it's calling itself!
end
# now call the method
bad_method # => SystemStackError (stack level too deep)

コード内のどこで問題が発生しているのかを示すトレースバックが表示されるので、問題を見つけることができます。許容スタック深さを増やしても、この問題は解決されません。