fix(kobject): Add an empty string ("") check.
1.New parameter checking has been added. Fixed the issue where an empty string ("", that is, only the end character) was passed in. The parameter checking of kobject failed to detect the problem, resulting in data errors.
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
|
||||
#include <kernel/mr_initcall.h>
|
||||
#include <kernel/mr_irq.h>
|
||||
#include <kernel/mr_kclock.h>
|
||||
#include <kernel/mr_khook.h>
|
||||
#include <kernel/mr_klist.h>
|
||||
|
||||
@@ -226,8 +226,8 @@ MR_INLINE void irq_action_defer_entry(mr_kwork_t *kwork, void *args) {
|
||||
mask = mr_kspinlock_lock_irqsave(&klock);
|
||||
|
||||
/* Save irq action arguments */
|
||||
entry = action->defer_entry;
|
||||
owner = action->owner;
|
||||
entry = (mr_irq_entry_t *)action->defer_entry;
|
||||
owner = (void *)action->owner;
|
||||
irq = action->irq;
|
||||
|
||||
/* Unlock */
|
||||
@@ -647,8 +647,8 @@ mr_irq_return_t mr_irq_handle(mr_uint32_t irq) {
|
||||
|
||||
/* Mark irq action pending */
|
||||
action->irq |= IRQ_ACTION_PENDING;
|
||||
entry = action->entry;
|
||||
owner = action->owner;
|
||||
entry = (mr_irq_entry_t *)action->entry;
|
||||
owner = (void *)action->owner;
|
||||
|
||||
/* Unlock */
|
||||
mr_kspinlock_unlock_irqrestore(&klock, mask);
|
||||
|
||||
@@ -309,7 +309,8 @@ mr_err_t mr_kobject_add(mr_kobject_t *kobj, mr_kobject_t *parent,
|
||||
mr_err_t ret;
|
||||
|
||||
/* Check arguments(parent checked in 'kobject_varg_add') */
|
||||
if ((!kobj) || (!MR_KOBJECT_IS_INITED(kobj)) || (!fmt)) {
|
||||
if ((!kobj) || (!MR_KOBJECT_IS_INITED(kobj)) || (!fmt)
|
||||
|| (fmt[0] == '\0')) {
|
||||
return -MR_EINVAL;
|
||||
}
|
||||
|
||||
@@ -398,7 +399,7 @@ mr_kobject_t *mr_kobject_lookup(mr_kobject_t *parent, const char *fmt, ...) {
|
||||
mr_va_list args;
|
||||
|
||||
/* Check arguments(parent checked in 'kobject_varg_lookup') */
|
||||
if (!fmt) {
|
||||
if ((!fmt) || (fmt[0] == '\0')) {
|
||||
return MR_NULL;
|
||||
}
|
||||
|
||||
@@ -504,7 +505,7 @@ mr_ssize_t mr_kobject_attr_show(mr_kobject_t *kobj, const char *name, char *buf,
|
||||
mr_kattr_t *attr;
|
||||
|
||||
/* Check arguments */
|
||||
if ((!kobj) || (!MR_KOBJECT_IS_INITED(kobj)) || (!name)
|
||||
if ((!kobj) || (!MR_KOBJECT_IS_INITED(kobj)) || (!name) || (name[0] == '\0')
|
||||
|| ((!buf) && (size > 0))) {
|
||||
return -MR_EINVAL;
|
||||
}
|
||||
@@ -524,7 +525,7 @@ mr_ssize_t mr_kobject_attr_store(mr_kobject_t *kobj, const char *name,
|
||||
mr_kattr_t *attr;
|
||||
|
||||
/* Check arguments */
|
||||
if ((!kobj) || (!MR_KOBJECT_IS_INITED(kobj)) || (!name)
|
||||
if ((!kobj) || (!MR_KOBJECT_IS_INITED(kobj)) || (!name) || (name[0] == '\0')
|
||||
|| ((!buf) && (size > 0))) {
|
||||
return -MR_EINVAL;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ int mr_kprintf(const char *fmt, ...) {
|
||||
int ret;
|
||||
|
||||
/* Check arguments */
|
||||
if (!fmt) {
|
||||
if ((!fmt) || (fmt[0] == '\0')) {
|
||||
return -MR_EINVAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -254,8 +254,8 @@ MR_INLINE void ktimer_timeout_check(void) {
|
||||
mr_klist_move(&ktimer->list, &list);
|
||||
|
||||
/* Save ktimer arguments */
|
||||
entry = ktimer->entry;
|
||||
args = ktimer->args;
|
||||
entry = (mr_ktimer_entry_t *)ktimer->entry;
|
||||
args = (void *)ktimer->args;
|
||||
|
||||
/* Unlock */
|
||||
mr_kspinlock_unlock_irqrestore(&klock, mask);
|
||||
|
||||
@@ -277,8 +277,8 @@ mr_err_t mr_kworkqueue_execute(mr_kworkqueue_t *kqueue) {
|
||||
}
|
||||
|
||||
/* Save kwork entry and args */
|
||||
entry = kwork->entry;
|
||||
args = kwork->args;
|
||||
entry = (mr_kwork_entry_t *)kwork->entry;
|
||||
args = (void *)kwork->args;
|
||||
|
||||
/* Unlock */
|
||||
mr_kspinlock_unlock_irqrestore(&klock, mask);
|
||||
|
||||
@@ -212,7 +212,7 @@ int mr_vsnprintf(char *buf, mr_size_t size, const char *fmt, mr_va_list args) {
|
||||
char effector;
|
||||
|
||||
/* Check arguments */
|
||||
if (!fmt) {
|
||||
if ((!fmt) || (fmt[0] == '\0')) {
|
||||
return 0;
|
||||
}
|
||||
if (!buf) {
|
||||
|
||||
@@ -15,6 +15,11 @@ int mr_sscanf(const char *buf, const char *fmt, ...) {
|
||||
va_list args;
|
||||
int ret;
|
||||
|
||||
/* Check arguments */
|
||||
if ((!buf) || (!fmt) || (fmt[0] == '\0')) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Scan string */
|
||||
va_start(args, fmt);
|
||||
ret = vsscanf(buf, fmt, args);
|
||||
|
||||
Reference in New Issue
Block a user