MCPcopy Create free account
hub / github.com/Super-long/ChubbyGo / ParserFileName

Function ParserFileName

Connect/common.go:216–269  ·  view source on GitHub ↗

* * @brief: 解析从json提取出的文件名 * @return: 正确返回true;否则false,这里不区分各种错误类型 * @notes: 一下根据机器不同可以配置,Golang我没有找到接口可以直接获得以下值,所以手动配置 * Linux下使用getconf PATH_MAX /usr 获取路径长度限制;4096 * getconf NAME_MAX /usr 获取文件名称长度限制;255 * 还有一点是我个人的要求,后缀必须是hdb,就是这么傲娇 * 文件名的限制 : https://en.wikipedia.org/wiki/Filename * 目前搜到

(pathname string)

Source from the content-addressed store, hash-verified

214 * 目前搜到的文件名限制就是不允许采用"/"" ",且"-"不能是第一个字符
215 */
216func ParserFileName(pathname string) bool {
217 Length := len(pathname)
218
219 if Length > 4096 {
220 return false
221 }
222
223 index1 := -1 // 标示后缀
224 index2 := 0 // 标示文件名
225
226 for i := Length - 1; i >= 0; i-- {
227 if pathname[i] == '.' {
228 index1 = i
229 } else if pathname[i] == '/' {
230 index2 = i
231 break
232 }
233 }
234
235 // 不存在后缀
236 if index1 == -1 {
237 return false
238 }
239
240 // 检查后缀
241 // a . h d b
242 // 0 1 2 3 4
243 if Length-index1 != 4 {
244 return false
245 } else { // 简单有效 不玩花的
246 if pathname[index1+1] != 'h' || pathname[index1+2] != 'd' || pathname[index1+3] != 'b' {
247 return false
248 }
249 }
250
251 // 检查文件名; 255见函数注释
252 if index1-index2-1 > 255 {
253 return false
254 }
255
256 // TODO 目前只检查了最后一个文件名,在这里检测格式是为了早点检测出错误,因为打开这个文件时协议已经开始,会导致读取持久化数据失败;倒也可以使用默认文件
257 if pathname[index2+1] == '-' {
258 return false
259 }
260
261 // 因为上面的解析过程这里面的数据不可能存在'/',只需要检查' '就可以了
262 for i := index2 + 1; i < index1; i++ {
263 if pathname[i] == ' ' {
264 return false
265 }
266 }
267
268 return true
269}
270
271/*
272 * @brief: 李浩帮忙推出的服务器连接时间间隔函数

Callers 1

checkJsonParserMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected