CVE-2021-3177:Python ctypes 缓冲区溢出漏洞分析

8 月 6 日
阅读 2 分钟
449
起步相关的 issue 与 修复 ,从描述来看,这是一个 sprintf 函数引发的缓冲区溢出漏洞。补丁获取链接:[链接]复现使用 3.8.7 进行复现:这个漏洞在 3.8.8 便已修复:分析通过生成的 coredump 文件,查看异常堆栈:注意到 Python-3.8.7/Modules/_ctypes/callproc.c : {代码...} 变量 buffer 的长度为 256 ,因此长度不够...

使用 qemu-user-static 在 Docker 中生成容器异构

8 月 5 日
阅读 1 分钟
564
我们知道,Docker 容器与其宿主是共用 Linux 内核的,但若需要在 x86 机器是创建 arm linux 环境的容器,该如何操作。这就需要借助一个神器 qemu-user-static 了。

排查一个因 node 版本引发的段错误问题

8 月 5 日
阅读 3 分钟
408
真的不是我的锅起步这是一个客户问题,经过一番排查发现是 node 版本的问题。记录一下这个奇葩的过程。排查过程1. 尝试本地复现在客户机器上出现的问题由于调试不太方便,优先尝试复刻客户运行环境复现问题。node 版本:10.18.1运行环境: k8s, docker, 镜像系统 alpine 3.11.3应用依赖: 向客户要了 package.json结果,本...

php-fpm reload 会取消正在处理的请求的解决方案

2022-09-18
阅读 2 分钟
2.7k
在测试中,发现 php-fpm reload 会强制 kill 掉正在处理的请求。网上查了一下,发现其他人也有这个问题并反馈给了官方:[链接] 和 [链接],帖子是 2017 和 2012 年的,到现在还没解决。

CPython中处理 is 与 is not 语句

2021-07-28
阅读 2 分钟
2.1k
文档中 [链接] 表示对于 x is y 当且仅当两个变量指向同一对象时才为真。对象可以通过 id() 函数来查看它的身份(id() 函数返回了对象在内存中的映射)。

请谨慎使用 datetime.utcnow()

2021-07-20
阅读 2 分钟
6.4k
正如 utcnow() 文档 所表明的那样,它返回的是 naive time ,Naive datetime 实例被认为为表示本地时间,因此它的时间戳会比使用 now(None) 相差的时间正好是该电脑所在时区。

动手来自己实现一下 namedtuple

2020-05-29
阅读 3 分钟
2.2k
namedtuple 是 collections 模块下的一个功能,它是类工厂函数,能返回 tuple 子类,允许通过字段名向元组中取值,性能上接近于元组。

Python 中 staticmethod 和 classmethod 原理探究

2020-05-25
阅读 2 分钟
2.5k
文章 《Python中 property 的实现原理及实现纯 Python 版》 中探究了 property 的实现原理。如果能理解那边描述符的使用方式,那也能很快理解本篇中的 staticmethod 和 classmethod 。

Python中 property 的实现原理及实现纯 Python 版

2020-05-24
阅读 3 分钟
2.7k
为了能够实现访问属性就调用某个函数,这里将利用 描述符对象 作为本文的实现起点,当某个类定义了 __get__ 方法后,通过其方法名称可以直接调用 __get__ ,例如:

字符串在Python内部是如何省内存的

2020-02-03
阅读 3 分钟
3.3k
Python3 起,str 就采用了 Unicode 编码(注意这里并不是 utf8 编码,尽管 .py 文件默认编码是 utf8 )。 每个标准 Unicode 字符占用 4 个字节。这对于内存来说,无疑是一种浪费。

我的2019年开源贡献

2020-01-19
阅读 1 分钟
2.1k
年末时候往往可以总结下今年做了什么。我想说说一年来在开源软件的贡献。我的想法也比较简单,开源软件帮助我解决非常多的问题,如今我也有所成长,应该反馈于开源软件。

PHP 理清 foreach 潜规则

2019-07-02
阅读 6 分钟
4.2k
原文地址:[链接] 起步 在相当长的一段时间里,我认为 foreach 在循环期间使用的是原数组的副本。但最近经过一些实验后发现这并不是百分百正确。 比如副本的说法说得通的: {代码...} 这个例子在循环体中修改数组不影响循环过程,副本的说法说得通。 然而 {代码...} 对于不同的PHP版本输出会有差异,php7 提及 foreach ...

PHP 对输入变量名的自动转换的问题与源码分析

2019-07-01
阅读 4 分钟
2.8k
原文地址:[链接] 起步 表单提交到PHP脚本时,底层的PHP会做一层转换。将一些符号转成下划线 _ 。 实际上这层转换中会发生很多意想不到的情况。 列举这些情况 一个简单的测试就出现了意外,一个是单个 [ 也会被替换,对于 array 的输入, key 不会做转换。于是我多多测了一下,得出如下列表: {代码...} 这个转换机制十...

Python 中 is 语法带来的误解

2019-05-06
阅读 1 分钟
2.5k
起步 Python 的成功一个原因是它的可读性,代码清晰易懂,更容易被人类所理解,但有时可读性会产生误解。 假如要判断一个变量是不是 17,那可以: {代码...} x 是 17 肯定是比 x == 17 更加口语化的。 is的误解 但是如果你尝试: {代码...} 这个判断不见得管用。is 用来检查左侧和右侧是否是完全相同的对象。如果有两个不...

Python 模块源码分析:queue 队列

2019-04-05
阅读 6 分钟
2.4k
从这初始化函数能得到哪些信息呢?首先,队列是可以设置其容量大小的,并且具体的底层存放元素的它使用了 collections.deque() 双端列表的数据结构,这使得能很方便的做先进先出操作。这里还特地抽象为 _init 函数是为了方便其子类进行覆盖,允许子类使用其他结构来存放元素(比如优先队列使用了 list)。

Python 的 heapq 模块源码分析

2019-01-07
阅读 5 分钟
6.1k
堆是一个树状的数据结构,其中的子节点都与父母排序顺序关系。因为堆排序中的树是满二叉树,因此可以用列表来表示树的结构,使得元素 N 的子元素位于 2N + 1 和 2N + 2 的位置(对于从零开始的索引)。

raise 与 raise ... from 的区别

2018-12-11
阅读 2 分钟
3.7k
起步 Python 的 raise 和 raise from 之间的区别是什么? {代码...} 输出: {代码...} 而 raise from : {代码...} 输出: {代码...} 分析 不同之处在于,from 会为异常对象设置 __cause__ 属性表明异常的是由谁直接引起的。 处理异常时发生了新的异常,在不使用 from 时更倾向于新异常与正在处理的异常没有关联。而 fro...

Python 的 enum 模块源码分析

2018-12-10
阅读 6 分钟
3.2k
这部分我的第一个想法是去控制 __dict__ 中的 key 。但这样的方式并不好,__dict__ 范围大,它包含该类的所有属性和方法。而不单单是枚举的命名空间。我在源码中发现 enum 使用另一个方法。通过 __prepare__ 魔术方法可以返回一个类字典实例,在该实例使用 __prepare__ 魔术方法自定义命名空间,在该空间内限定成员名不...

Python 的枚举类型

2018-12-10
阅读 3 分钟
23k
枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、状态等。在没有专门提供枚举类型的时候我们是怎么做呢,一般就通过字典或类来实现:

Python中几种属性访问的区别

2018-11-16
阅读 3 分钟
4.8k
python的提供一系列和属性访问有关的特殊方法:__get__, __getattr__, __getattribute__, __getitem__ 。本文阐述它们的区别和用法。

用Python实现读写锁

2018-11-04
阅读 4 分钟
12.1k
Python 提供的多线程模型中并没有提供读写锁,读写锁相对于单纯的互斥锁,适用性更高,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。

让Python中类的属性具有惰性求值的能力

2018-08-15
阅读 2 分钟
3.5k
我们希望将一个只读的属性定义为 property 属性方法,只有在访问它时才进行计算,但是,又希望把计算出的值缓存起来,不要每次访问它时都重新计算。

深度剖析凭什么python中整型不会溢出

2018-06-14
阅读 6 分钟
17.2k
在python2时代,整型有 int 类型和 long 长整型,长整型不存在溢出问题,即可以存放任意大小的整数。在python3后,统一使用了长整型。这也是吸引科研人员的一部分了,适合大数据运算,不会溢出,也不会有其他语言那样还分短整型,整型,长整型...因此python就降低其他行业的学习门槛了。

深度剖析isinstance的检查机制

2018-05-03
阅读 4 分钟
2.4k
通过内建方法 isinstance(object, classinfo) 可以判断一个对象是否是某个类的实例。但你是否想过关于鸭子协议的对象是如何进行判断的呢? 比如 list 类的父类是继 object 类的,但通过 isinstance([], typing.Iterable) 返回的却是真,难道 list 是可迭代的子类?学过Python的面向对象应该知道,list的基类是object的。

神经网络NN算法(理论篇)

2017-12-28
阅读 4 分钟
12.1k
神经网络算法( Neural Network )是机器学习中非常非常重要的算法。这是整个深度学习的核心算法,深度学习就是根据神经网络算法进行的一个延伸。理解这个算法的是怎么工作也能为后续的学习打下一个很好的基础。

从零开始构造邻近分类器KNN

2017-12-28
阅读 2 分钟
2.1k
起步 本章介绍如何自行构造 KNN 分类器,这个分类器的实现上算是比较简单的了。不过这可能需要你之前阅读过这方面的知识。 前置阅读 分类算法之邻近算法:KNN(理论篇) 分类算法之邻近算法:KNN(应用篇) 欧拉公式衡量距离 关于距离的测量方式有多种,这边采用欧拉距离的测量方式: $$ d(x,y) = \sqrt{\sum_{i=0}^n(x_i-y...

分类算法之邻近算法:KNN(应用篇)

2017-12-09
阅读 1 分钟
6k
它有四个特征,萼片长度,萼片宽度,花瓣长度,花瓣宽度 (sepal length, sepal width, petal length and petal width)。

从零开始构造决策树(python)

2017-12-07
阅读 11 分钟
10.9k
起步 本章介绍如何不利用第三方库,仅用python自带的标准库来构造一个决策树。不过这可能需要你之前阅读过这方面的知识。 前置阅读 分类算法之决策树(理论篇) 分类算法之决策树(应用篇) 本文使用将使用《应用篇》中的训练集,向量特征仅有 0 和 1 两种情况。 关于熵(entropy)的一些计算 对于熵,根据前面提到的计算...

分类算法之邻近算法:KNN(理论篇)

2017-12-06
阅读 2 分钟
12.2k
Cover 和 Hart 在 1968 年提出了最初的邻近算法,用于解决分类( classification )的问题。关于这个算法在维基百科中也有介绍:[链接] 。

分类算法之决策树(应用篇)

2017-12-05
阅读 4 分钟
8.5k
起步 在理论篇我们介绍了决策树的构建和一些关于熵的计算方法,这篇文章将根据一个例子,用代码上来实现决策树。 实验环境 操作系统: win10 64 编程语言: Python3.6 用到的第三方模块有: {代码...} 数据源 为了方便理解和架设,我们用理论篇中买电脑的例子: 将这些记录保存成 csv 文件: {代码...} 这些数据就是这次...