github 简介

Github是一个面向开源的私有软件托管平台,因为只支持Git作为唯一的版本库格式进行托管,所以叫Github。它于2008年4月10日正式上线,它的开发者也是linux之父:“林纳斯·本纳第克特·托瓦兹”,作为一个分布式的版本控制系统,Github的功能除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,在 GitHub 上托管的版本数量非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。Github的仓库是他独有的特征,你大可以理解为一个无限容量且没有传输速度限制的网上云盘,但是这个云盘是可以设置公共与私密空间的,在这个开源的时代,你可以通过这个平台看到世界上许多其他大佬的程序作品,并且学习他们的编程思想,而且这很容易获得。

为什么需要向开源项目提交issue

作为开源项目的收益者:广大搬砖程序员们,能为开源项目做贡献是一种荣誉,为社区做贡献也有利于开源项目发展从而使更多的程序员收益.

怎么向开源项目提交issue

进入正题,起因是我在研究 fastjson2 项目库时发现在使用 2.0.18 版本com.alibaba.fastjson2.JSONObject 该类的 getDate 方法时出现了一些时间转换异常,代码如下

/*** -*- coding = utf-8 -*-** @Author: Created by rio on 2022/9/20 11:26* @PACKAGE: test* @Software: IntelliJ IDEA*/
public class Application {public static void main(String[] args) {try {String time = "2000-00-00 00:00:00";com.alibaba.fastjson2.JSONObject jsonObject = new com.alibaba.fastjson2.JSONObject();jsonObject.put("time", time);System.out.println(jsonObject.getDate("time"));} catch (Exception e) {e.printStackTrace();}}
}

pom 依赖如下

    <dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.18</version></dependency>

调用结果如图所示

"2000-00-00 00:00:00" 在我们人类看来一个非法的时间戳究竟为何会变成1999年的12月1日呢,究竟是人性的扭曲,还是道德的沦丧

为了一探究竟我们深入源码 debug 发现在 com.alibaba.fastjson2.util 包下的 DateUtils 类负责完成字符串类型的日期转换,且该类的millis方法在不满足

if (zoneId != IOUtils.SHANGHAI_ZONE_ID && zoneId.getRules() != IOUtils.SHANGHAI_ZONE_RULES)

情况下会返回默认毫秒值 943977600000 ,而该值正等于1999-12-01 00:00:00.000,这相当于说再时区 id 等于 SHANGHAI_ZONE_ID 或 时区规则等于 SHANGHAI_ZONE_RULES 时 会给一个默认值,于是我们就看到了开头的 bug

提交 bug

那么既然我们发现了 bug,如何提交呢?

首先,进入github 开源仓库,如上图所示 可以看到仓库中的 Issues 标签点击 New issue

这里我们可以针对我们的问题进行选择,既然是 bug 我们就点击 bug 栏的 Get started,具体提交格式如下

### 问题描述
*简要描述您碰到的问题。*### 环境信息
*请填写以下信息:*- OS信息:  [e.g.:CentOS 8.4.2105 4Core 3.10GHz 16 GB]- JDK信息: [e.g.:Openjdk 1.8.0_312]- 版本信息:[e.g.:Fastjson2 2.x.x]### 重现步骤
*如何操作可以重现该问题:*1. 使用 `xxx.xxx` 方法
2. 输入 `...`  数据
3. 出现 `...` 错误
```java
//可在此输入示例代码
```### 期待的正确结果
*对您期望发生的结果进行清晰简洁的描述。*### 相关日志输出
*请复制并粘贴任何相关的日志输出。*#### 附加信息
*如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。*

我提交完毕之后的 issue 链接如下

[BUG] 输入错误的日期字符串时调用JSONObject.getDate方法输出超出预期 · Issue #912 · alibaba/fastjson2 · GitHub

问题的解决与自我提升

那么新版是如何解决的呢?通过简单的 debug 我们发现wenshao做了一个简单的判断,当月份不等于0 并且年份不等于 0 时则抛出异常,吐槽: 这个修 bug 的方式确实不敢恭维,为了兼顾 "0000-00-00 00:00:00" 这样的日期格式默认为Thu Jan 01 00:00:00 CST 1970 真的是煞费苦心....

那么根据这个逻辑是不是当年份为 0 而月份不为 0 时也能正常运行呢?我们继续探究

果然,我们又得到了一个异常的输出

更严重的问题是笔者在输入正常值的情况下居然有时也会抛出异常

"2022-11-09 18:34:00" = Wed Nov 09 18:34:00 CST 2022
"2022-12-09 18:34:00" = java.time.format.DateTimeParseException: illegal inputat com.alibaba.fastjson2.util.DateUtils.toMillis19(DateUtils.java:2289)at com.alibaba.fastjson2.util.DateUtils.parseDate(DateUtils.java:41)at com.alibaba.fastjson2.JSONObject.getDate(JSONObject.java:1012)at test.Application.main(Application.java:20)

难道世界上不存在2022-12-09 18:34:00? 在分析了源码之后我们不难理解为什么会出现这种奇怪的报错,这也是为什么开源社区并不推荐使用 fastjson 的原因,即便重构到了 fastjson2 这种兼容代码也是非常难处理的,最后这个 bug 就当做小礼物留给有探索欲的同学提交 issue 吧!

如何向开源项目提交issue以及为什么开源社区不推荐使用 fastjson库相关推荐

  1. 如何往github开源项目提交代码

    如何往开源项目提交代码,其实很简单的只是以前没有提交过,以openrasp为例 1.注册一个github账号 2.登陆账号 3.找到openrasp项目 4.在openrasp页面上点击fork一下 ...

  2. 开源项目贡献者_如何认识您的开源项目贡献者并发展您的社区

    开源项目贡献者 by David Herron 大卫·赫伦(David Herron) 如何认识您的开源项目贡献者并发展您的社区 (How to recognize your open source ...

  3. 开源项目贡献者_入职开源贡献者的10个技巧

    开源项目贡献者 贡献者是许多开源项目的命脉,因为它们使较小的项目能够在没有大量财务支持的情况下得以成长和改进,并且为项目带来了新的观点. 非营利组织Ushahidi就是这种情况,该组织正在构建和使用软 ...

  4. php 项目 管理,PHP开源项目:文档管理_php开源项目网

    当前位置: php开源项目网 > 文档管理 > 开源项目:文档管理 XODA是一个采用PHP和Ajax开发的文档管理系统(DMS).无需用到数据库,支持为文件和目录添加备注说明信息和过滤功 ...

  5. 向MIP开源项目提交Issues

    Issues 是 GitHub 管理需求,讨论技术方案的方式,附:官方解释.MIP 是在 GitHub 上的开源项目,也使用 Issues 来做任务管理. 一.Issues 在 MIP 项目中的应用 ...

  6. 如何向gitee开源项目提交代码

    文章目录 前言 登录账号 fork项目 fork完成 拉去代码 check out出分支 开发 提交代码到自己的远程仓库 创建pull request create pull request 前言 如 ...

  7. 开源项目贡献者_嘿新手开源贡献者:请写博客。

    开源项目贡献者 by Shubheksha 通过Shubheksha 嘿新手开源贡献者:请写博客. (Hey newbie open source contributors: please blog ...

  8. python开源项目贡献_通过为开源项目做贡献,我如何找到理想的工作

    python开源项目贡献 by Utsab Saha 由Utsab Saha 通过为开源项目做贡献,我如何找到理想的工作 (How I found my dream job by contributi ...

  9. 积极参与开源项目,促进.NET Core生态社区发展

    今天早上在微信群里聊天聊到百度的SDK 已经支持.NET Core, 百度已经在3月份就支持了,想起当时还是我在他们的github上提的issue: https://github.com/Baidu- ...

最新文章

  1. keras 的 example 文件 imdb_fasttext.py 解析
  2. Jetson TX2刷机
  3. Linux运维笔记-文档总结-NFS文件共享(网络文件系统)
  4. Oulipo(kmp算法)
  5. qu(判定操作序列)NOIP模拟 数据结构判断 模拟
  6. Web---JSP-EL表达式
  7. C#中Console.ReadKey()与ConsoleKey的一些用法
  8. Θ(n)反转单链表(算法导论第三版第十章10.2-7)
  9. java8 函数式编程_使用Javaslang进行Java 8中的函数式编程
  10. poj 3414 Pots BFS
  11. ASP.NET之SqlBulkCopy
  12. linux虚拟机头文件快捷键,linux学习笔记——基础命令、快捷键与认识虚拟机
  13. 单片机入门教程:第一章 单片机8051概述
  14. Ubuntu状态栏显示网速,内存利用率等信息——sysmonitor
  15. 【报告分享】2021年中国新能源汽车行业洞察-Mob研究院(附下载)
  16. 微信开发网页授权获取用户信息
  17. 西门子840Dsl系统的刀具列表数据采集
  18. 离线地图for SQLite
  19. 掌握桌面整理的技巧,让你的桌面更加整洁
  20. ZYNQ - 嵌入式Linux开发 -05- Linux C编程和Makefile

热门文章

  1. NodeJS爬虫初探
  2. Flink 笔记01:安装部署与快速入门
  3. 3.Flask基础-2
  4. nginx发布vue多页面程序
  5. 算法基础(枚举)--- 熄灯问题(C语言)
  6. ssm生鲜超市管理系统的设计与实现 毕业设计-附源码261635
  7. 通过TSS软件栈使用TPM——获取并改变TPM寄存器-学习笔记1
  8. vivoY73s和vivoY51s哪个好
  9. MySQL入门之课后思考题第八章
  10. 深度学习入门之激活函数