assert

记一道.git源码泄露题

拈花ヽ惹草 提交于 2020-03-05 01:47:47
记录一道今天做的.git源码泄露题 看到url有可能会有文件包含,尝试一下 应该是有什么被BAN了,这时候也没有什么更好的思路了 用御剑扫一扫后台,看看有没有备份文件或者.git文件什么的 果然扫描以后发现了.git目录 这时候就用到GitHack了 https://github.com/lijiejie/GitHack 使用后发现了 我们访问文件夹里的flag.php 可是没有东西 看来事情并没有那么简单,我们回去访问index.php <?php if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page = "home"; } $file = "templates/" . $page . ".php"; //$file = "templates/" . '.system("cd ../../../; ls -lA;").' . ".php"; // I heard '..' is dangerous! assert("strpos('$file', '..') === false") or die("Detected hacking attempt!"); // TODO: Make this look nice assert("file_exists('$file')") or die("That

Boost智能指针——shared_ptr

梦想的初衷 提交于 2020-03-04 16:32:25
boost::scoped_ptr 虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而 boost::shared_ptr 可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法: #include <string> #include <iostream> #include <boost/shared_ptr.hpp> class implementation { public : ~implementation() { std::cout << "destroying implementation\n" ; } void do_something() { std::cout << "did something\n" ; } }; void test() { boost::shared_ptr<implementation> sp1( new implementation()); std::cout<< "The Sample now has " <<sp1.use_count()<< " references\n" ; boost::shared_ptr<implementation> sp2 = sp1; std::cout<< "The Sample now has " <<sp2.use

PowerMockito使用详解

拈花ヽ惹草 提交于 2020-03-02 10:35:45
一、为什么要使用Mock工具 在做单元 测试 的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等)。 而我们没法控制这些外部依赖的对象,为了解决这个问题,我们就需要用到Mock工具来模拟这些外部依赖的对象,来完成单元测试。 二、为什么要使用PowerMock 现如今比较流行的Mock工具如 jMock 、 EasyMock 、 Mockito 等都有一个共同的缺点:不能mock静态、final、私有方法等。而 PowerMock 能够完美的弥补以上三个Mock工具的不足。 三、PowerMock简介 PowerMock是一个扩展了其它如EasyMock等mock框架的、功能更加强大的框架。PowerMock使用一个自定义类加载器和字节码操作来模拟静态方法,构造函数,final类和方法,私有方法,去除静态初始化器等等。通过使用自定义的类加载器,简化采用的IDE或持续集成服务器不需要做任何改变。熟悉PowerMock支持的mock框架的开发人员会发现PowerMock很容易使用,因为对于静态方法和构造器来说,整个的期望API是一样的。PowerMock旨在用少量的方法和注解扩展现有的API来实现额外的功能。目前PowerMock支持EasyMock和Mockito。 四、PowerMock入门

pytest中文文档:安装和入门

狂风中的少年 提交于 2020-03-02 08:10:49
pytest是一个使构建简单和可扩展测试变得容易的框架。测试具有表现力和可读性-不需要样板代码。数分钟内即可开始为您的应用程序或库进行小型单元测试或复杂的功能测试。 安装pytest 1、在命令行中运行以下命令: pip install -U pytest 2、检查您是否安装了正确的版本: $ pytest --version This is pytest version 5.x.y, imported from $PYTHON_PREFIX/lib/python3.6/site-packages/pytest/__init__.py 创建您的第一个测试 仅用四行代码创建一个简单的测试函数: # content of test_sample.py def func(x): return x + 1 def test_answer(): assert func(3) == 5 而已。您现在可以执行测试功能: $ pytest =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-5.x.y, py-1.x.y, pluggy-0.x.y cachedir: $PYTHON_PREFIX/.pytest

java 测试 (junit+ junit 断言 + postman)

梦想的初衷 提交于 2020-03-02 08:00:42
    实际开发中,除了开发,我想测试也是必不可少的一环吧。从简单的@Test 、main 方法测试 到 页面测试 ,断言,postman。 bug是无处不在,随时发生的事,高效率的调试、检测可以节省大量的开发时间。 思路一确定,敲代码也就花不了多少时间,可是敲完代码后的调试,检测往往会花费许多时间。 甚者除了页面调试(通过jsp,HTML页面带参过来到后台,后台返回参数给页面) 其他的一点都不会。记得去年的时候,公司做个金融产品,是跟外部的团队合作一起开发的。由于前端页面是由外部团队提供给我们的,所以有时候他们还未提供给我们页面的时候,我们就自己根据接口文档等把后台业务相关逻辑处理好。 某天上午,公司一个新来的新手跑过来问我:XXX, 代码写完啦,没有页面怎么测啊。 我当时就感到奇怪,没有页面就不能测吗? 我反问了他一句, 他请我过去帮忙教教他,我也就回了句自己去百度就没理了。那时候想着就是虽然测试不是我们的主业,有测试,可是我们开发人员自测的手段还是要有一些的吧。刚好现在已经开始写博客了,今天也有空,也就写篇相关的博客,记录记录      阅读此篇博客前阅读本人的 junit 常用注解 + junit 断言详解 + junit 运行(eclipse + IDEA)      1. @Test , main 方法     这个是最简单测试了,一般用于测试一些方法,实现

字符串替换空格

孤人 提交于 2020-03-02 05:03:53
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 解题思路 老实说,看到这个题目想到的就是字符串替换,但是面试题肯定不是这么简单的,那么怎么在原字符串上进行高效的替换呢?我们的字符串替换,主要的消耗是在移位上,每遇到一个空格,后面的字符串就往后移位,那么之前的移位都没有作用了。我们知道字符串的长度,知道替换字符串的长度,如果还知道空格的多少,那么这个字符串的长度就知道了。知道长度之后,只需要把数据放到响应的位置就可以了。 步骤: 1. 遍历字符串,统计出空格数量 2. 再遍历一次,完成替换 代码实现 普通解法,直接替换字符串 public static string ReplaceSpaceForSimple(string str) { return str.Replace(" ", "%20"); } 精妙解法数据移位 public static string ReplaceSpace(string str) { int count = 0; foreach (var item in str) { if (item == ' ') { count++; } } int oLength = str.Length; int length = oLength +

31用d编程属性合同编程

跟風遠走 提交于 2020-03-01 12:30:28
可以指定 成员函数 作为属性名. 这样 a.b ,b就可能是函数,只要前面加了 @属性 . .length 属性不能修改静态数组.对切片,有可能会分配空间,甚至移动到新位置+初化新成员. 因为属性,所以 调用函数,可以不加() . struct Rectangle { double width ; double height ; } auto garden = Rectangle ( 10 , 20 ) ; writeln ( garden . area ) ; struct Rectangle { double width ; double height ; double area ( ) const @property { return width * height ; } //常,保证本函数不修改本对象 } 这样,就强制保证了 一致性 .不会被修改. auto garden = Rectangle ( 10 , 20 ) ; writeln ( "面积为: " , garden . area ) ; 就像第三个成员变量一样使用. void area ( double newArea ) @property { auto scale = sqrt ( newArea / area ) ; width * = scale ; height * = scale ; } 修改,作为

c++ unit testing check output is correct

大兔子大兔子 提交于 2020-03-01 02:34:28
问题 If I want to write my own test.cpp that checks if another .cpp file is outputting the way I want it to output, is there anyway to do it without explicitly printing it? In other words, is there anything such as assert(output_of_file_being_tested, "this is the correct output"); where output_of_file_being_tested is something that's supposed to be "cout"ed. 回答1: The solution is not to hard-code the output stream. Pass a reference to std::ostream to your code somehow, and use std::stringstream to

c语言数字转字符串

落花浮王杯 提交于 2020-03-01 01:43:13
对下面代码的一些细节,解释下为什么那么做。 1. char buf[sizeof(int) * 8 + 1] = ""; 这个buf的作用是缓存中间结果,长度没有写死。好处是不同的平台上这段代码都可以执行。 2. if (base < 2 || base > 36) 该判断检查用户传入的进制数是否合法。base < 2 主要过滤负数和0和1。base > 36的意义是在超过10进制的数里,是用字母a表示10的。以此类推z可以表示36。在只使用ascii字符表示大于10的数时,最大的表示值是36,超过这个值就不能表示。 3. uval = -val; 这各写法可以避免一个潜在的坑。当val为int值为INT_MIN时 -val会溢出。表象为-val 的值还是INT_MIN,还是个负数 4.至于为什么用一个无符号整数与一个>0的int进行整除与取余 uval % base uval /= base 因为c语言的标准里没有规定x / y当有一个值为负数时,结果该向x坐标轴的左侧靠近(向0取整) 还是向侧靠近(负无穷) 它只规定了 (x / y) * y + (x % y) = x -14 /5 的结果可以是 -2 或者 -3 至为正数为啥没有两个结果。本人只是用了几个值进行了验证。。 好了贴代码: #include <stdio.h> #include <limits.h>

04. Dart - Functions

你离开我真会死。 提交于 2020-03-01 01:15:05
个人学习用 不严谨 学习的话请看别的博客 可选参数 void main(){ /** * 可选参数分为: * 可选命名参数 * 可选位置参数 * * 函数也是对象并且类型为Function,这意味着函数可以被赋值给变量或者其他函数的参数 * */ List list = [1,2,3]; bool isNoNull(int i){ return list[i] != null; } print(isNoNull(2)); //简化表达式 bool isNoNullSimple(int i) => list[i] !=null; print(isNoNullSimple(1)); } 可选命名参数 void main() { /** * 当调用函数的时候可以使用 参数名: 参数值 的形式来指定命名参数 * 可以使用 @required 注解来标识一个命名参数是必须的参数 */ /** * 定义 - 可选命名参数 * 大括号包裹 */ void showText({String s, bool b}) { if (b) { print(s); } } /** * 调用 - 可选命名参数 * 键值对形式,键是定义时候的参数名称 */ showText(s: "123", b: true); showText(s: "123", b: false); } 可选位置参数 void main(