码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • logback-classic包中ThrowableProxy递归缺陷StackOverflowError解析


    logback-classic(<1.2.12版本)ThrowableProxy类中存在递归缺陷,会导致java.lang.StackOverflowError。改缺陷在1.2.12以上版本(包含该版本)中已修复。

    如何复现:

    两个异常彼此设置casue:

    运行后报以下错误

    以上写法是ThrowableProxy类60行一直递归调用。还有其他场景:

     

    jdk中,我们一般经常使用throwable.printStackTrace()方法,该方法在打印以上的异常时是否会报错,见下图:

     可知,jdk是不会报错的(测试版本为jdk8),会打印出CIRCULAR REFERENCE提示存在循环引用。

    jdk在打印异常时,做了循环引用的检测:

    以下是对比logback-classic存在缺陷和修复缺陷后的ThrowableProxy类的对比:

    logback-classic1.2.12版,已有检测循环引用的代码:

    logback-classic <1.2.12版为什么会报递归错误,以下为1.2.3版ThrowableProxy源码分析: 

    第60行,会检查该异常的cause是否存在,存在时会掉构造器方法,因此如果两个异常彼此设为cause,会触发在60行代码上递归,直至抛出StackOverflowError。

    第72行,如果一个异常a为异常b的cause,异常b抑制(suppressed)异常a,那60行和72行会一直递归。

  • 相关阅读:
    数据仓库与数据挖掘实验练习3-4(实验二2024.5.8)
    深度学习中常用的注意力模块及其原理和作用
    <十三>objectARX开发:模拟实现CAD的移动Move命令
    Hive数据仓库行转列
    面试美团被问到了Redis,搞懂这几个问题,让你轻松吊打面试官
    [Linux]如何配置定期任務腳本,並將執行結果寄到外部郵箱? (下)
    (四)激光线扫描-光平面标定
    品RocketMQ 源码,学习并发编程三大神器
    加密算法笔记
    oracle 同一张表同时insert多条数据 mysql 同一张表同时insert多条数据
  • 原文地址:https://blog.csdn.net/chuixue24/article/details/134079369
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号