[frr] New Defects reported by Coverity Scan for freerangerouting/frr
scan-admin at coverity.com
scan-admin at coverity.com
Thu Mar 30 07:51:36 EDT 2017
Hi,
Please find the latest report on new defect(s) introduced to freerangerouting/frr found with Coverity Scan.
45 new defect(s) introduced to freerangerouting/frr found with Coverity Scan.
New defect(s) Reported-by: Coverity Scan
Showing 20 of 45 defect(s)
** CID 1422699: Memory - illegal accesses (USE_AFTER_FREE)
/ldpd/ldpd.c: 419 in ldpd_shutdown()
________________________________________________________________________________________________________
*** CID 1422699: Memory - illegal accesses (USE_AFTER_FREE)
/ldpd/ldpd.c: 419 in ldpd_shutdown()
413 msgbuf_clear(&iev_ldpe->ibuf.w);
414 close(iev_ldpe->ibuf.fd);
415 msgbuf_clear(&iev_lde->ibuf.w);
416 close(iev_lde->ibuf.fd);
417
418 config_clear(ldpd_conf);
>>> CID 1422699: Memory - illegal accesses (USE_AFTER_FREE)
>>> Dereferencing freed pointer "ldpd_conf".
419 QOBJ_UNREG(ldpd_conf);
420
421 log_debug("waiting for children to terminate");
422 do {
423 pid = wait(&status);
424 if (pid == -1) {
** CID 1422698: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422698: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 3978 in set_lcommunity_delete()
3972 char *str;
3973
3974 str = XCALLOC (MTYPE_TMP, strlen (argv[2]->arg) + strlen (" delete") + 1);
3975 strcpy (str, argv[2]->arg);
3976 strcpy (str + strlen (argv[2]->arg), " delete");
3977
>>> CID 1422698: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3978 generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
3979 "large-comm-list", str);
3980
3981 XFREE (MTYPE_TMP, str);
3982 return CMD_SUCCESS;
3983 }
** CID 1422697: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422697: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 3934 in set_lcommunity_none()
3928 set_lcommunity_none_cmd,
3929 "set large-community none",
3930 SET_STR
3931 "BGP large community attribute\n"
3932 "No large community attribute\n")
3933 {
>>> CID 1422697: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3934 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
3935 "large-community", "none");
3936 }
3937
3938 DEFUN (no_set_lcommunity,
3939 no_set_lcommunity_cmd,
** CID 1422696: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422696: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 3671 in set_aspath_prepend_asn()
3665 {
3666 int idx_asn = 3;
3667 int ret;
3668 char *str;
3669
3670 str = argv_concat (argv, argc, idx_asn);
>>> CID 1422696: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3671 ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
3672 "as-path prepend", str);
3673 XFREE (MTYPE_TMP, str);
3674
3675 return ret;
3676 }
** CID 1422695: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422695: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 3889 in set_community_delete()
3883 char *str;
3884
3885 str = XCALLOC (MTYPE_TMP, strlen (argv[idx_comm_list]->arg) + strlen (" delete") + 1);
3886 strcpy (str, argv[idx_comm_list]->arg);
3887 strcpy (str + strlen (argv[idx_comm_list]->arg), " delete");
3888
>>> CID 1422695: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3889 generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "comm-list", str);
3890
3891 XFREE (MTYPE_TMP, str);
3892 return CMD_SUCCESS;
3893 }
3894
** CID 1422694: (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422694: (NULL_RETURNS)
/bgpd/bgp_routemap.c: 4443 in no_set_ipx_vpn_nexthop()
4437 arg = NULL;
4438 else
4439 arg = argv[idx_ip]->arg;
4440 if (argv_find_and_parse_afi (argv, argc, &idx, &afi))
4441 {
4442 if (afi == AFI_IP)
>>> CID 1422694: (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_delete".
4443 return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
4444 "ip vpn next-hop", arg);
4445 else
4446 return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
4447 "ipv6 vpn next-hop", argv[idx_ip]->arg);
4448 }
/bgpd/bgp_routemap.c: 4446 in no_set_ipx_vpn_nexthop()
4440 if (argv_find_and_parse_afi (argv, argc, &idx, &afi))
4441 {
4442 if (afi == AFI_IP)
4443 return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
4444 "ip vpn next-hop", arg);
4445 else
>>> CID 1422694: (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_delete".
4446 return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
4447 "ipv6 vpn next-hop", argv[idx_ip]->arg);
4448 }
4449 return CMD_SUCCESS;
4450 }
4451
** CID 1422693: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422693: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 4047 in set_ecommunity_soo()
4041 {
4042 int idx_asn_nn = 3;
4043 int ret;
4044 char *str;
4045
4046 str = argv_concat (argv, argc, idx_asn_nn);
>>> CID 1422693: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
4047 ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
4048 "extcommunity soo", str);
4049 XFREE (MTYPE_TMP, str);
4050 return ret;
4051 }
4052
** CID 1422692: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422692: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 4013 in set_ecommunity_rt()
4007 {
4008 int idx_asn_nn = 3;
4009 int ret;
4010 char *str;
4011
4012 str = argv_concat (argv, argc, idx_asn_nn);
>>> CID 1422692: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
4013 ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
4014 "extcommunity rt", str);
4015 XFREE (MTYPE_TMP, str);
4016
4017 return ret;
4018 }
** CID 1422691: (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422691: (NULL_RETURNS)
/bgpd/bgp_routemap.c: 3834 in set_community()
3828
3829 if (additive)
3830 {
3831 argstr = XCALLOC (MTYPE_TMP, strlen (str) + strlen (" additive") + 1);
3832 strcpy (argstr, str);
3833 strcpy (argstr + strlen (str), " additive");
>>> CID 1422691: (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3834 ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
3835 "community", argstr);
3836 XFREE (MTYPE_TMP, argstr);
3837 }
3838 else
3839 ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
/bgpd/bgp_routemap.c: 3839 in set_community()
3833 strcpy (argstr + strlen (str), " additive");
3834 ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
3835 "community", argstr);
3836 XFREE (MTYPE_TMP, argstr);
3837 }
3838 else
>>> CID 1422691: (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3839 ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
3840 "community", str);
3841
3842 community_free (com);
3843
3844 return ret;
** CID 1422690: (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422690: (NULL_RETURNS)
/bgpd/bgp_routemap.c: 4079 in set_origin()
4073 "remote EGP\n"
4074 "local IGP\n"
4075 "unknown heritage\n")
4076 {
4077 int idx_origin = 2;
4078 if (strncmp (argv[idx_origin]->arg, "igp", 2) == 0)
>>> CID 1422690: (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
4079 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
4080 "igp");
4081 if (strncmp (argv[idx_origin]->arg, "egp", 1) == 0)
4082 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
4083 "egp");
4084 if (strncmp (argv[idx_origin]->arg, "incomplete", 2) == 0)
/bgpd/bgp_routemap.c: 4082 in set_origin()
4076 {
4077 int idx_origin = 2;
4078 if (strncmp (argv[idx_origin]->arg, "igp", 2) == 0)
4079 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
4080 "igp");
4081 if (strncmp (argv[idx_origin]->arg, "egp", 1) == 0)
>>> CID 1422690: (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
4082 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
4083 "egp");
4084 if (strncmp (argv[idx_origin]->arg, "incomplete", 2) == 0)
4085 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
4086 "incomplete");
4087
/bgpd/bgp_routemap.c: 4085 in set_origin()
4079 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
4080 "igp");
4081 if (strncmp (argv[idx_origin]->arg, "egp", 1) == 0)
4082 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
4083 "egp");
4084 if (strncmp (argv[idx_origin]->arg, "incomplete", 2) == 0)
>>> CID 1422690: (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
4085 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
4086 "incomplete");
4087
4088 return CMD_WARNING;
4089 }
4090
** CID 1422689: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422689: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 4310 in set_ipv6_nexthop_global()
4304 IN6_IS_ADDR_LINKLOCAL(&addr))
4305 {
4306 vty_out (vty, "%% Invalid global nexthop address%s", VTY_NEWLINE);
4307 return CMD_WARNING;
4308 }
4309
>>> CID 1422689: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
4310 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
4311 "ipv6 next-hop global", argv[idx_ipv6]->arg);
4312 }
4313
4314
4315 DEFUN (no_set_ipv6_nexthop_global,
** CID 1422688: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422688: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 3606 in set_local_pref()
3600 "set local-preference (0-4294967295)",
3601 SET_STR
3602 "BGP local preference path attribute\n"
3603 "Preference value\n")
3604 {
3605 int idx_number = 2;
>>> CID 1422688: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3606 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
3607 "local-preference", argv[idx_number]->arg);
3608 }
3609
3610
3611 DEFUN (no_set_local_pref,
** CID 1422687: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422687: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 4240 in set_ipv6_nexthop_peer()
4234 "set ipv6 next-hop peer-address",
4235 SET_STR
4236 IPV6_STR
4237 "Next hop address\n"
4238 "Use peer address (for BGP only)\n")
4239 {
>>> CID 1422687: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
4240 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
4241 "ipv6 next-hop peer-address", NULL);
4242 }
4243
4244 DEFUN (no_set_ipv6_nexthop_peer,
4245 no_set_ipv6_nexthop_peer_cmd,
** CID 1422686: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422686: Null pointer dereferences (NULL_RETURNS)
/ospfd/ospf_routemap.c: 623 in set_metric_type()
617 SET_STR
618 "Type of metric for destination routing protocol\n"
619 "OSPF[6] external type 1 metric\n"
620 "OSPF[6] external type 2 metric\n")
621 {
622 char *ext = argv[2]->text;
>>> CID 1422686: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
623 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
624 "metric-type", ext);
625 }
626
627 DEFUN (no_set_metric_type,
628 no_set_metric_type_cmd,
** CID 1422685: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422685: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 3636 in set_weight()
3630 "set weight (0-4294967295)",
3631 SET_STR
3632 "BGP weight for routing table\n"
3633 "Weight value\n")
3634 {
3635 int idx_number = 2;
>>> CID 1422685: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3636 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "weight",
3637 argv[idx_number]->arg);
3638 }
3639
3640
3641 DEFUN (no_set_weight,
** CID 1422684: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422684: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 4155 in set_aggregator_as()
4149
4150 argstr = XMALLOC (MTYPE_ROUTE_MAP_COMPILED,
4151 strlen (argv[idx_number]->arg) + strlen (argv[idx_ipv4]->arg) + 2);
4152
4153 sprintf (argstr, "%s %s", argv[idx_number]->arg, argv[idx_ipv4]->arg);
4154
>>> CID 1422684: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
4155 ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
4156 "aggregator as", argstr);
4157
4158 XFREE (MTYPE_ROUTE_MAP_COMPILED, argstr);
4159
4160 return ret;
** CID 1422683: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422683: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 4113 in set_atomic_aggregate()
4107 DEFUN (set_atomic_aggregate,
4108 set_atomic_aggregate_cmd,
4109 "set atomic-aggregate",
4110 SET_STR
4111 "BGP atomic aggregate attribute\n" )
4112 {
>>> CID 1422683: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
4113 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
4114 "atomic-aggregate", NULL);
4115 }
4116
4117 DEFUN (no_set_atomic_aggregate,
4118 no_set_atomic_aggregate_cmd,
** CID 1422682: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422682: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 3581 in set_ip_nexthop_peer()
3575 "set ip next-hop peer-address",
3576 SET_STR
3577 IP_STR
3578 "Next hop address\n"
3579 "Use peer address (for BGP only)\n")
3580 {
>>> CID 1422682: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3581 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
3582 "ip next-hop", "peer-address");
3583 }
3584
3585 DEFUN (set_ip_nexthop_unchanged,
3586 set_ip_nexthop_unchanged_cmd,
** CID 1422681: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422681: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 3724 in set_aspath_exclude()
3718 {
3719 int idx_asn = 3;
3720 int ret;
3721 char *str;
3722
3723 str = argv_concat (argv, argc, idx_asn);
>>> CID 1422681: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3724 ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
3725 "as-path exclude", str);
3726 XFREE (MTYPE_TMP, str);
3727 return ret;
3728 }
3729
** CID 1422680: Null pointer dereferences (NULL_RETURNS)
________________________________________________________________________________________________________
*** CID 1422680: Null pointer dereferences (NULL_RETURNS)
/bgpd/bgp_routemap.c: 3854 in set_community_none()
3848 set_community_none_cmd,
3849 "set community none",
3850 SET_STR
3851 "BGP community attribute\n"
3852 "No community attribute\n")
3853 {
>>> CID 1422680: Null pointer dereferences (NULL_RETURNS)
>>> Dereferencing a pointer that might be null "(struct route_map_index *)qobj_get_typed(vty->qobj_index, &qobj_t_route_map_index)" when calling "generic_set_add".
3854 return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "community",
3855 "none");
3856 }
3857
3858 DEFUN (no_set_community,
3859 no_set_community_cmd,
________________________________________________________________________________________________________
To view the defects in Coverity Scan visit, https://u2389337.ct.sendgrid.net/wf/click?upn=08onrYu34A-2BWcWUl-2F-2BfV0V05UPxvVjWch-2Bd2MGckcRa7dJ8klHLUFWVd2fqpS-2B-2FHaN43B-2FQ11ntcKmbKat2WeHs8691VOJpZofPkpp-2BRBqc-3D_d-2Fi2nRutHp-2FDWtw8JRg-2Bc1m9CS4-2B5uVbodfDyLsp-2FJntkGh-2FIoDYIGu-2BB30-2Fh3ekoFzAp70Tfc58hDvIMKTCCKIeamTkOVgwocEhbq2EFQfCWREHWl2TIP4NdhvAlW5OO7OFEXIA1ChQeNveOkKLNF2FW8YO1-2Fpd89CJAvk8shW5-2F7FWAgbiBnB8oa-2BFK26TYJVfcwhE7nJrjNzLsh0rXw-3D-3D
To manage Coverity Scan email notifications for "frr at lists.nox.tf", click https://u2389337.ct.sendgrid.net/wf/click?upn=08onrYu34A-2BWcWUl-2F-2BfV0V05UPxvVjWch-2Bd2MGckcRbVDbis712qZDP-2FA8y06Nq4lcTWm1Zma8LQDNpOYqrETKrqBiM18kcBcL8b08LzBPOYJYGySZ4Vv7d5QYcnSbGxl3QyORKgEmDxh-2BE2mj6dp1V4JSs2jbMZuLnEQJOW0Z0-3D_d-2Fi2nRutHp-2FDWtw8JRg-2Bc1m9CS4-2B5uVbodfDyLsp-2FJntkGh-2FIoDYIGu-2BB30-2Fh3ekFrgmFeVjD0Cz3eDInFjqbeosEYITjqdmqCpqmy4AVjoH7L9K76KovYu-2FW2xeLY0QVXDo4tEGIB54itcnbS42HNWjOi42hTvRPx7k8wr6dP2TcEsxgcFjJvjwg8rEqllzarDxxVaSW8fUsTOG4KvLWw-3D-3D
More information about the dev
mailing list